EnumPrintProcessors (winspool)
Last changed: anonymous

.
Summary
Enumerates the PrintProcessors on a specified server

C# Signature:

      [DllImport("winspool.drv", CharSet = CharSet.Auto, SetLastError = true)]
      private static extern bool EnumPrintProcessors(string pName,string pEnvironment,UInt32 Level,IntPtr pPrintProcessorInfo,UInt32 cbBuf,
        ref UInt32 cbNeeded, ref UInt32 cReturned);

VB Signature:

Declare Function EnumPrintProcessors Lib "winspool.drv" (TODO) As TODO

User-Defined Types:

PRINTPROCESSOR_INFO_1

Notes:

None.

Sample Code:

     uint cbNeeded = 0;
     uint cReturned = 0;
     if (EnumPrintProcessors("","",1,IntPtr.Zero, 0, ref cbNeeded, ref cReturned))
     {
        return null;
     }
     int lastWin32Error = Marshal.GetLastWin32Error();
     if (lastWin32Error == ERROR_INSUFFICIENT_BUFFER)
     {
        IntPtr pAddr = Marshal.AllocHGlobal((int)cbNeeded);
        if (EnumPrintProcessors("", "", 1, pAddr, cbNeeded , ref cbNeeded, ref cReturned))
        {
           PRINTPROCESSOR_INFO_1[] printprocessorInfo1 = new PRINTPROCESSOR_INFO_1[cReturned];
           int offset = pAddr.ToInt32();
           Type type = typeof(PRINTPROCESSOR_INFO_1);
           int increment = Marshal.SizeOf(type);
           for (int i = 0; i < cReturned; i++)
           {
          printprocessorInfo1[i] = (PRINTPROCESSOR_INFO_1)Marshal.PtrToStructure(new IntPtr(offset), type);
          offset += increment;
           }
           Marshal.FreeHGlobal(pAddr);
           return printprocessorInfo1;
        }
        lastWin32Error = Marshal.GetLastWin32Error();
     }

Documentation