text: /**
   * Copyright (c) 2019, Microsoft Corporation (MIT License).
   */
  
  #include <nan.h>
  #include <windows.h>
  
  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<DWORD>(64);
    auto processCount = GetConsoleProcessList(&processList[0], processList.size());
    if (processList.size() < processCount) {
        processList.resize(processCount);
        processCount = GetConsoleProcessList(&processList[0], processList.size());
    }
    FreeConsole();
  
    v8::Local<v8::Array> result = Nan::New<v8::Array>();
    for (DWORD i = 0; i < processCount; i++) {
      Nan::Set(result, i, Nan::New<v8::Number>(processList[i]));
    }
    info.GetReturnValue().Set(result);
  }
  
  extern "C" void init(v8::Local<v8::Object> target) {
    Nan::HandleScope scope;
    Nan::SetMethod(target, "getConsoleProcessList", ApiConsoleProcessList);
  };
  
  NODE_MODULE(pty, init);
  