/** * Copyright (c) 2019, Microsoft Corporation (MIT License). */ #include #include static NAN_METHOD(ApiConsoleProcessList) { if (info.Length() != 1 || !info[0]->IsNumber()) { Nan::ThrowError("Usage: getConsoleProcessList(shellPid)"); return; } const SHORT pid = info[0]->Uint32Value(Nan::GetCurrentContext()).FromJust(); if (!FreeConsole()) { Nan::ThrowError("FreeConsole failed"); } if (!AttachConsole(pid)) { Nan::ThrowError("AttachConsole failed"); } auto processList = std::vector(64); auto processCount = GetConsoleProcessList(&processList[0], processList.size()); if (processList.size() < processCount) { processList.resize(processCount); processCount = GetConsoleProcessList(&processList[0], processList.size()); } FreeConsole(); v8::Local result = Nan::New(); for (DWORD i = 0; i < processCount; i++) { Nan::Set(result, i, Nan::New(processList[i])); } info.GetReturnValue().Set(result); } extern "C" void init(v8::Local target) { Nan::HandleScope scope; Nan::SetMethod(target, "getConsoleProcessList", ApiConsoleProcessList); }; NODE_MODULE(pty, init);