GetPrinterDriver (winspool)
Last changed: -165.225.60.117

.
Summary
TODO - a short description

C# Signature:

    [DllImport("winspool.drv", SetLastError = true), DefaultDllImportSearchPaths(DllImportSearchPath.SafeDirectories)]
    public static extern bool GetPrinterDriver(IntPtr hPrinter,
                              [MarshalAs(UnmanagedType.LPTStr)] string environment,
                              uint level,
                              IntPtr driverInfo,
                              int cbBuf,
                              out uint pcbNeeded);

VB Signature:

Declare Function GetPrinterDriver Lib "winspool.dll" (TODO) As TODO

User-Defined Types:

See https://www.pinvoke.net/default.aspx/winspool.DRIVER_INFO_8

Alternative Managed API:

Do you know one? Please contribute it!

Notes:

None.

Tips & Tricks:

Please add some!

Sample Code:

    public const uint DRIVER_INFO_8 = 8;
    public const uint PRINTER_DRIVER_XPS = 0x00000002;

    private String GetPrinterDriver(string printerName)
    {
            IntPtr hPrinter = new IntPtr(0);
            DocInfo1 di = new DocInfo1();
            if (OpenPrinter(printerName.Normalize(), out hPrinter, 0))
            {
            DriverInfo8 driverInfo = new DriverInfo8();
            IntPtr pDriverInfo = IntPtr.Zero;
            uint bytesNeeded;
            // assume type 3 driver
            di.pDataType = "RAW";
            GetPrinterDriver(hPrinter, null, DRIVER_INFO_8, pDriverInfo, 0, out bytesNeeded);
            pDriverInfo = Marshal.AllocHGlobal((int)bytesNeeded);
            if (GetPrinterDriver(hPrinter, null, DRIVER_INFO_8, pDriverInfo, (int)bytesNeeded, out bytesNeeded))
            {
                driverInfo = (DriverInfo8) Marshal.PtrToStructure(pDriverInfo, typeof(DriverInfo8));
                // if type 4 driver
                if ((driverInfo.dwPrinterDriverAttributes & PRINTER_DRIVER_XPS) != 0)
                {
                di.pDataType = "XPS_PASS";
                }
            }

            Marshal.FreeHGlobal(pDriverInfo);
            }
    }

Documentation