title: Cannot understand this c++ typedef
body: <p>I am not really sure how to read this code:</p>
  
  <pre><code>typedef NTSTATUS(NTAPI* QUERYINFORMATIONPROCESS)(
    IN   HANDLE ProcessHandle,
    IN   PROCESSINFOCLASS ProcessInformationClass,
    OUT  PVOID ProcessInformation,
    IN   ULONG ProcessInformationLength,
    OUT  PULONG ReturnLength OPTIONAL
    );
  </code></pre>
  
  <p>Is <code>NTSTATUS</code> or <code>QUERYINFORMATIONPROCESS</code> the name of the <code>typedef</code>? And, if so,  what is the actual type? Is this a function pointer type? The usage is this:</p>
  
  <pre><code>QUERYINFORMATIONPROCESS QueryInformationProcess =
      (QUERYINFORMATIONPROCESS)GetProcAddress(
      hDll, "NtQueryInformationProcess");
  
    if (QueryInformationProcess)
    {
      NTSTATUS ntStatus = QueryInformationProcess(
        processInformation.hProcess,
        PROCESSINFOCLASS::ProcessBasicInformation,
        &amp;pbi, sizeof(pbi), &amp;uLength);
    […]
  </code></pre>
  
  <p>This comes from a the "C++ Multithreading Cookbook", which does not explain this piece of code. I appreciate your help!</p>