Sample Code

Windows Driver Samples/ Print Provider Sample Template/ C++/ pp.c/

//
//  Windows (Printing) Driver Development Kit Samples.
//
//  Sample Print Provider template.
//
//  pp.c - Print provider initialization functions and stubs for the required
//         supported API set.
//
//  Copyright (c) 1990 - 2005 Microsoft Corporation.
//  All Rights Reserved.
//
//
//  This source code is intended only as a supplement to Microsoft
//  Development Tools and/or on-line documentation.  See these other
//  materials for detailed information regarding Microsoft code samples.
//
//  THIS CODE AND INFORMATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY
//  KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
//  IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
//  PARTICULAR PURPOSE.
//



#include "pp.h"

HMODULE hmod = NULL;
WCHAR *pszRegistryPath = NULL;
WCHAR *pszRegistryPortNames=L"PortNames";
WCHAR szMachineName[MAX_COMPUTERNAME_LENGTH + 3];
CRITICAL_SECTION SplSem;
HMODULE hSpoolssDll = NULL;
FARPROC pfnSpoolssEnumPorts = NULL;

//
// Define the supported API set.
//
// Should have corresponding entries in the _PRINTPROVIDOR structure definition
// in winsplp.h.
//
// See "NOTES on PRINTPROVIDOR struct" in pp.h for details on which API's must
// be supported by a print processor.
//
static
PRINTPROVIDOR PrintProvidor =
{
    PP_OpenPrinter,
    PP_SetJob,
    PP_GetJob,
    PP_EnumJobs,
    PP_AddPrinter,
    PP_DeletePrinter,
    PP_SetPrinter,
    PP_GetPrinter,
    PP_EnumPrinters,
    PP_AddPrinterDriver,
    PP_EnumPrinterDrivers,
    PP_GetPrinterDriver,
    PP_GetPrinterDriverDirectory,
    PP_DeletePrinterDriver,
    PP_AddPrintProcessor,
    PP_EnumPrintProcessors,
    PP_GetPrintProcessorDirectory,
    PP_DeletePrintProcessor,
    PP_EnumPrintProcessorDatatypes,
    PP_StartDocPrinter,
    PP_StartPagePrinter,
    PP_WritePrinter,
    PP_EndPagePrinter,
    PP_AbortPrinter,
    PP_ReadPrinter,
    PP_EndDocPrinter,
    PP_AddJob,
    PP_ScheduleJob,
    PP_GetPrinterData,
    PP_SetPrinterData,
    PP_WaitForPrinterChange,
    PP_ClosePrinter,
    PP_AddForm,
    PP_DeleteForm,
    PP_GetForm,
    PP_SetForm,
    PP_EnumForms,
    PP_EnumMonitors,
    PP_EnumPorts,
    PP_AddPort,
    PP_ConfigurePort,
    PP_DeletePort,
    PP_CreatePrinterIC,
    PP_PlayGdiScriptOnPrinterIC,
    PP_DeletePrinterIC,
    PP_AddPrinterConnection,
    PP_DeletePrinterConnection,
    PP_PrinterMessageBox,
    PP_AddMonitor,
    PP_DeleteMonitor
};

//
// Required for DLL initialization.
//
BOOL DllMain
(
    _In_ HINSTANCE hdll,
    _In_ DWORD     dwReason,
    _In_ LPVOID    lpReserved
)
{
    UNREFERENCED_PARAMETER(lpReserved);

    if (dwReason == DLL_PROCESS_ATTACH)
    {
        DisableThreadLibraryCalls(hdll);

        hmod = hdll;
    }

    else if (dwReason == DLL_PROCESS_DETACH)
    {

    }
    return TRUE;
}



//
// This function *must* be exported by a print provider.
//
_Use_decl_annotations_
BOOL
InitializePrintProvidor
(
    LPPRINTPROVIDOR pPrintProvidor,
    DWORD           cbPrintProvidor,
    LPWSTR          pszFullRegistryPath
)

{
    DWORD dwLen;

    if (!pPrintProvidor || !pszFullRegistryPath || !*pszFullRegistryPath)
    {
        SetLastError(ERROR_INVALID_PARAMETER);
        return FALSE;
    }

    memcpy(pPrintProvidor, &PrintProvidor, min(sizeof(PRINTPROVIDOR), cbPrintProvidor));

    pszRegistryPath = AllocSplStr(pszFullRegistryPath);
    if (!pszRegistryPath)
    {
        return FALSE;
    }

    InitializeCriticalSection(&SplSem);
    szMachineName[0] = szMachineName[1] = L'\\';
    dwLen = MAX_COMPUTERNAME_LENGTH;
    GetComputerName(szMachineName + 2, &dwLen);

    InitializePortNames();

    return TRUE;
}

//
//
// Stub functions for all the API's supported by this sample print providor.
//
//

_Success_(return == TRUE)
BOOL
PP_OpenPrinter
(
    _In_                                      LPWSTR             pszPrinterName,
    _Out_                                     LPHANDLE           phPrinter,
    _In_reads_bytes_opt_(sizeof(PRINTER_DEFAULTS)) LPPRINTER_DEFAULTS pDefault
)

{
    DWORD err = NO_ERROR;

    UNREFERENCED_PARAMETER(pDefault);

    if (!pszPrinterName)
    {
        SetLastError(ERROR_INVALID_NAME);
        return FALSE;
    }

    if (!phPrinter)
    {
        SetLastError(ERROR_INVALID_PARAMETER);
        return FALSE;
    }

    *phPrinter = NULL;

    if (err)
    {
        SetLastError(err);
    }

    return (err == NO_ERROR);
}

_Success_(return == TRUE)
BOOL
PP_ClosePrinter
(
    _In_ HANDLE  hPrinter
)

{
    DWORD err = NO_ERROR;

    UNREFERENCED_PARAMETER(hPrinter);

    if (err)
    {
        SetLastError(err);
    }
    return (err == NO_ERROR);
}

_Success_(return == TRUE)
BOOL
PP_GetPrinter
(
    _In_                    HANDLE  hPrinter,
    _In_                    DWORD   dwLevel,
    _Out_writes_bytes_opt_(cbBuf) LPBYTE  pbPrinter,
    _In_                    DWORD   cbBuf,
    _Out_                   LPDWORD pcbNeeded
)

{
    DWORD err = NO_ERROR;

    UNREFERENCED_PARAMETER(cbBuf);
    UNREFERENCED_PARAMETER(pbPrinter);
    UNREFERENCED_PARAMETER(dwLevel);
    UNREFERENCED_PARAMETER(hPrinter);

    if (!pcbNeeded)
    {
        SetLastError(ERROR_INVALID_PARAMETER);
        return FALSE;
    }

    *pcbNeeded = 0;

    if (err)
    {
        SetLastError(err);
    }

    return (err == NO_ERROR);
}

_Success_(return == TRUE)
BOOL
PP_SetPrinter
(
    _In_ HANDLE  hPrinter,
    _In_ DWORD   dwLevel,
    _In_ LPBYTE  pbPrinter,
    _In_ DWORD   dwCommand
)

{
    DWORD err = NO_ERROR;

    UNREFERENCED_PARAMETER(pbPrinter);
    UNREFERENCED_PARAMETER(dwCommand);
    UNREFERENCED_PARAMETER(hPrinter);

    switch (dwLevel)
    {
        case 0:
        case 1:
        case 2:
        case 3:
            break;

        default:
            SetLastError(ERROR_INVALID_LEVEL);
            return FALSE;
    }

    if (err)
    {
        SetLastError(err);
    }

    return (err == NO_ERROR);
}

_Success_(return == TRUE)
BOOL
PP_EnumPrinters
(
    _In_                    DWORD   dwFlags,
    _In_                    LPWSTR  pszName,
    _In_                    DWORD   dwLevel,
    _Out_writes_bytes_opt_(cbBuf) LPBYTE  pbPrinter,
    _In_                    DWORD   cbBuf,
    _Out_                   LPDWORD pcbNeeded,
    _Out_opt_               LPDWORD pcReturned
)

{
    DWORD  err = NO_ERROR;

    UNREFERENCED_PARAMETER(dwFlags);
    UNREFERENCED_PARAMETER(pszName);
    UNREFERENCED_PARAMETER(pbPrinter);
    UNREFERENCED_PARAMETER(cbBuf);

    if ((dwLevel != 1) && (dwLevel != 2))
    {
        SetLastError(ERROR_INVALID_NAME);
        return FALSE;
    }

    if (!pcbNeeded)
    {
        SetLastError(ERROR_INVALID_PARAMETER);
        return FALSE;
    }

    *pcbNeeded = 0;

    if (pcReturned)
    {
        *pcReturned = 0;
    }

    if (err)
    {
        SetLastError(err);
    }

    return (err == NO_ERROR);
}

_Success_(return == TRUE)
DWORD
PP_StartDocPrinter
(
    _In_ HANDLE  hPrinter,
    _In_ DWORD   dwLevel,
    _In_ LPBYTE  lpbDocInfo
)

{
    DWORD err = NO_ERROR;

    UNREFERENCED_PARAMETER(hPrinter);
    UNREFERENCED_PARAMETER(dwLevel);
    UNREFERENCED_PARAMETER(lpbDocInfo);

    if (dwLevel != 1)
    {
        SetLastError(ERROR_INVALID_PARAMETER);
        return FALSE;
    }

    if (err)
    {
        SetLastError(err);
    }

    return (err == NO_ERROR);
}

_Success_(return == TRUE)
BOOL
PP_WritePrinter
(
    _In_                HANDLE  hPrinter,
    _In_reads_bytes_(cbBuf)  LPVOID  pBuf,
    _In_                DWORD   cbBuf,
    _Out_               LPDWORD pcbWritten
)

{
    DWORD err = NO_ERROR;

    UNREFERENCED_PARAMETER(hPrinter);
    UNREFERENCED_PARAMETER(pBuf);
    UNREFERENCED_PARAMETER(cbBuf);

    if (!pcbWritten)
    {
        SetLastError(ERROR_INVALID_PARAMETER);
        return FALSE;
    }

    *pcbWritten = 0;

    if (err)
    {
        SetLastError(err);
    }

    return (err == NO_ERROR);
}

_Success_(return == TRUE)
BOOL
PP_AbortPrinter
(
    _In_ HANDLE  hPrinter
)

{
    DWORD err = NO_ERROR;

    UNREFERENCED_PARAMETER(hPrinter);

    if (err)
    {
        SetLastError(err);
    }

    return (err == NO_ERROR);
}

_Success_(return == TRUE)
BOOL
PP_EndDocPrinter
(
    _In_ HANDLE   hPrinter
)
{
    DWORD err = NO_ERROR;

    UNREFERENCED_PARAMETER(hPrinter);

    if (err)
    {
        SetLastError(err);
    }

    return (err == NO_ERROR);
}

_Success_(return == TRUE)
BOOL
PP_GetJob
(
    _In_                    HANDLE   hPrinter,
    _In_                    DWORD    dwJobId,
    _In_                    DWORD    dwLevel,
    _Out_writes_bytes_opt_(cbBuf) LPBYTE   pbJob,
    _In_                    DWORD    cbBuf,
    _Out_                   LPDWORD  pcbNeeded
)

{
    DWORD err = NO_ERROR;

    UNREFERENCED_PARAMETER(hPrinter);
    UNREFERENCED_PARAMETER(dwJobId);
    UNREFERENCED_PARAMETER(pbJob);
    UNREFERENCED_PARAMETER(cbBuf);

    if ((dwLevel != 1) && (dwLevel != 2))
    {
        SetLastError(ERROR_INVALID_LEVEL);
        return FALSE;
    }

    if (!pcbNeeded)
    {
        SetLastError(ERROR_INVALID_PARAMETER);
        return FALSE;
    }

    *pcbNeeded = 0;

    if (err)
    {
        SetLastError(err);
    }

    return (err == NO_ERROR);
}

_Success_(return == TRUE)
BOOL
PP_EnumJobs
(
    _In_                    HANDLE  hPrinter,
    _In_                    DWORD   dwFirstJob,
    _In_                    DWORD   dwNoJobs,
    _In_                    DWORD   dwLevel,
    _Out_writes_bytes_opt_(cbBuf) LPBYTE  pbJob,
    _In_                    DWORD   cbBuf,
    _Out_                   LPDWORD pcbNeeded,
    _Out_                   LPDWORD pcReturned
)

{
    DWORD err = NO_ERROR;

    UNREFERENCED_PARAMETER(hPrinter);
    UNREFERENCED_PARAMETER(dwFirstJob);
    UNREFERENCED_PARAMETER(dwNoJobs);
    UNREFERENCED_PARAMETER(pbJob);
    UNREFERENCED_PARAMETER(cbBuf);

    if ((dwLevel != 1) && (dwLevel != 2))
    {
        SetLastError(ERROR_INVALID_LEVEL);
        return FALSE;
    }

    if (!pcbNeeded || !pcReturned)
    {
        SetLastError(ERROR_INVALID_PARAMETER);
        return FALSE;
    }

    *pcbNeeded = 0;
    *pcReturned = 0;

    if (err)
    {
        SetLastError(err);
    }
    return (err == NO_ERROR);
}

_Success_(return == TRUE)
BOOL
PP_SetJob
(
    _In_ HANDLE  hPrinter,
    _In_ DWORD   dwJobId,
    _In_ DWORD   dwLevel,
    _In_ LPBYTE  pbJob,
    _In_ DWORD   dwCommand
)

{
    DWORD err = NO_ERROR;

    UNREFERENCED_PARAMETER(hPrinter);
    UNREFERENCED_PARAMETER(dwJobId);
    UNREFERENCED_PARAMETER(dwCommand);

    if ((dwLevel != 0) && (dwLevel != 1) && (dwLevel != 2))
    {
        SetLastError(ERROR_INVALID_LEVEL);
        return FALSE;
    }

    if ((dwLevel == 0) && (pbJob != NULL))
    {
        SetLastError(ERROR_INVALID_PARAMETER);
        return FALSE;
    }

    if (err)
    {
        SetLastError(err);
    }
    return (err == NO_ERROR);
}

_Success_(return == TRUE)
BOOL
PP_AddJob
(
    _In_                    HANDLE  hPrinter,
    _In_                    DWORD   dwLevel,
    _In_reads_bytes_opt_(cbBuf) LPBYTE  pbAddJob,
    _In_                    DWORD   cbBuf,
    _Out_                   LPDWORD pcbNeeded
)

{
    DWORD err = NO_ERROR;

    ADDJOB_INFO_1W TempBuffer;
    PADDJOB_INFO_1W OutputBuffer;
    DWORD OutputBufferSize;

    UNREFERENCED_PARAMETER(hPrinter);

    if (dwLevel != 1)
    {
        SetLastError(ERROR_INVALID_PARAMETER);
        return FALSE;
    }

    if (!pcbNeeded)
    {
        SetLastError(ERROR_INVALID_PARAMETER);
        return FALSE;
    }

    *pcbNeeded = 0;

    if (cbBuf < sizeof(ADDJOB_INFO_1W))
    {
        OutputBuffer = &TempBuffer;
        OutputBufferSize = sizeof(ADDJOB_INFO_1W);
    }
    else
    {
        OutputBuffer = (LPADDJOB_INFO_1W) pbAddJob;
        OutputBufferSize = cbBuf;
    }

    if (err)
    {
        SetLastError(err);
    }

    return (err == NO_ERROR);
}

_Success_(return == TRUE)
BOOL
PP_ScheduleJob
(
    _In_ HANDLE  hPrinter,
    _In_ DWORD   dwJobId
)

{
    DWORD err = NO_ERROR;

    UNREFERENCED_PARAMETER(hPrinter);
    UNREFERENCED_PARAMETER(dwJobId);

    if (err)
    {
        SetLastError(err);
    }

    return (err == NO_ERROR);
}

_Success_(return == TRUE)
DWORD
PP_WaitForPrinterChange
(
    _In_ HANDLE  hPrinter,
    _In_ DWORD   dwFlags
)

{
    DWORD err = NO_ERROR;

    UNREFERENCED_PARAMETER(hPrinter);

    if (err)
    {
        SetLastError(err);
        return 0;
    }

    return dwFlags;
}

_Success_(return == TRUE)
BOOL
PP_EnumPorts
(
    _In_                    LPWSTR   pszName,
    _In_                    DWORD    dwLevel,
    _Out_writes_bytes_opt_(cbBuf) LPBYTE   pbPorts,
    _In_                    DWORD    cbBuf,
    _Out_                   LPDWORD  pcbNeeded,
    _Out_                   LPDWORD  pcReturned
)

{
    DWORD         err = NO_ERROR;
    DWORD         cb = 0;
    PPORT         pPort;
    WCHAR        *pbEnd;
    PORT_INFO_1W *pInfoStruct;
    HRESULT       hr = S_OK;

    if (dwLevel != 1)
    {
        SetLastError(ERROR_INVALID_LEVEL);
        return FALSE;
    }

    if (!IsLocalMachine(pszName))
    {
        SetLastError(ERROR_INVALID_NAME);
        return FALSE;
    }

    if (!pcbNeeded || !pcReturned || (cbBuf && !pbPorts))
    {
        SetLastError(ERROR_INVALID_PARAMETER);
        return FALSE;
    }

    *pcbNeeded = FALSE;
    *pcReturned = FALSE;

    EnterCriticalSection(&SplSem);

    pPort = pFirstPort;
    while (pPort)
    {
        cb += (DWORD)(sizeof(PORT_INFO_1W) + (wcslen(pPort->pName) + 1) * sizeof(WCHAR));
        pPort = pPort->pNext;
    }

    *pcbNeeded = cb;
    *pcReturned = 0;

    if (cb && cb <= cbBuf)
    {
        pbEnd = (WCHAR *)(pbPorts + cb);
        pInfoStruct = (PORT_INFO_1W *)pbPorts;

        cb = 0;
        pPort = pFirstPort;
        while (pPort && cb < cbBuf)
        {
            int cwbName = (int)((wcslen(pPort->pName)) + 1);
            pbEnd -= cwbName;
            cb    += cwbName * sizeof(WCHAR);

            if (cb > cbBuf)
            {
                err = ERROR_INSUFFICIENT_BUFFER;
                break;
            }

            //
            // Set a NULL just in case pPort->pName is NULL
            //
            *pbEnd = L'\0';

            hr = StringCchCopy(pbEnd, cwbName, pPort->pName);

            if (FAILED(hr))
            {
                err = StatusFromHResult(hr);
                break;
            }

            if (cb + sizeof(PORT_INFO_1W) <= cbBuf)
            {
                pInfoStruct->pName = pbEnd;
                pInfoStruct++;
                cb += sizeof(PORT_INFO_1W);
            }
            else
            {
                err = ERROR_INSUFFICIENT_BUFFER;
                break;
            }

            pPort = pPort->pNext;
            (*pcReturned)++;
        }
    }
    else
    {
        err = ERROR_INSUFFICIENT_BUFFER;
    }

    LeaveCriticalSection(&SplSem);

    if (err)
    {
        SetLastError(err);
    }

    return (err == NO_ERROR);
}

_Success_(return == TRUE)
BOOL
PP_DeletePort
(
    _In_ LPWSTR  pszName,
    _In_ HWND    hWnd,
    _In_ LPWSTR  pszPortName
)

{
    DWORD err = NO_ERROR;
    BOOL fPortDeleted;

    UNREFERENCED_PARAMETER(hWnd);

    if (!IsLocalMachine(pszName))
    {
        SetLastError(ERROR_NOT_SUPPORTED);
        return FALSE;
    }

    fPortDeleted = DeletePortEntry(pszPortName);

    if (fPortDeleted)
    {
        err = DeleteRegistryEntry(pszPortName);
    }
    else
    {
        err = ERROR_UNKNOWN_PORT;
    }

    if (err)
    {
        SetLastError(err);
    }
    return (err == NO_ERROR);
}

_Success_(return == TRUE)
BOOL
PP_ConfigurePort
(
    _In_ LPWSTR  pszName,
    _In_ HWND    hWnd,
    _In_ LPWSTR  pszPortName
)

{
    UNREFERENCED_PARAMETER(hWnd);

    if (!IsLocalMachine(pszName))
    {
        SetLastError(ERROR_NOT_SUPPORTED);
        return FALSE;
    }
    else if (!PortKnown(pszPortName))
    {
        SetLastError(ERROR_UNKNOWN_PORT);
        return FALSE;
    }

    return TRUE;
}

_Success_(return == TRUE)
BOOL
PP_AddPrinterConnection
(
    _In_ LPWSTR  pszPrinterName
)
{
    UNREFERENCED_PARAMETER(pszPrinterName);

    SetLastError(ERROR_INVALID_NAME);
    return FALSE;
}

_Success_(return == TRUE)
BOOL
PP_EnumMonitors
(
    _In_                    LPWSTR   pszName,
    _In_                    DWORD    dwLevel,
    _Out_writes_bytes_opt_(cbBuf) LPBYTE   pbMonitor,
    _In_                    DWORD    cbBuf,
    _Out_                   LPDWORD  pcbNeeded,
    _Out_                   LPDWORD  pcReturned
)
{
    UNREFERENCED_PARAMETER(pszName);
    UNREFERENCED_PARAMETER(dwLevel);
    UNREFERENCED_PARAMETER(pbMonitor);
    UNREFERENCED_PARAMETER(cbBuf);
    UNREFERENCED_PARAMETER(pcbNeeded);
    UNREFERENCED_PARAMETER(pcReturned);

    SetLastError(ERROR_INVALID_NAME);
    return FALSE;
}

_Success_(return == TRUE)
BOOL
PP_AddPort
(
    _In_ LPWSTR  pszName,
    _In_ HWND    hWnd,
    _In_ LPWSTR  pszMonitorName
)
{
    UNREFERENCED_PARAMETER(pszName);
    UNREFERENCED_PARAMETER(hWnd);
    UNREFERENCED_PARAMETER(pszMonitorName);

    SetLastError(ERROR_NOT_SUPPORTED);
    return FALSE;
}

_Success_(return == TRUE)
HANDLE
PP_AddPrinter
(
    _In_                                LPWSTR  pszName,
    _In_                                DWORD   dwLevel,
    _In_reads_bytes_(sizeof(PRINTER_INFO_2)) LPBYTE  pbPrinter
)
{
    LPTSTR     pszPrinterName = NULL;
    LPTSTR     pszQueue  =  NULL;
    HANDLE     hPrinter = NULL;
    size_t     uSize = 0;
    DWORD      err;
    PPRINTER_INFO_2 pPrinterInfo;

    UNREFERENCED_PARAMETER(pszName);

    pPrinterInfo = (PPRINTER_INFO_2)pbPrinter;

    if (dwLevel != 2)
    {
        err = ERROR_INVALID_PARAMETER;
        goto ErrorExit;
    }

    uSize = wcslen(((PRINTER_INFO_2 *)pbPrinter)->pPrinterName) + 1;

    pszPrinterName = (LPTSTR)LocalAlloc(LPTR, uSize * sizeof(WCHAR));
    if (!pszPrinterName)
    {
        err = ERROR_NOT_ENOUGH_MEMORY;
        goto ErrorExit;
    }

    err = StatusFromHResult(StringCchCopy(pszPrinterName,
                                          uSize,
                                          pPrinterInfo->pPrinterName));

    if (err != ERROR_SUCCESS)
    {
        goto ErrorExit;
    }


    if (  ( !ValidateUNCName(pszPrinterName))
       || ( (pszQueue = wcschr(pszPrinterName + 2, L'\\')) == NULL)
       || ( pszQueue == (pszPrinterName + 2))
       || ( *(pszQueue + 1) == L'\0')
       )
    {
        err =  ERROR_INVALID_NAME;
        goto ErrorExit;
    }

    if (pszPrinterName == NULL)
    {
        SetLastError(ERROR_INVALID_NAME);
        goto ErrorExit;
    }

    if (PortExists(pszPrinterName, &err) && !err)
    {
        SetLastError(ERROR_ALREADY_ASSIGNED);
        goto ErrorExit;
    }

    return hPrinter;

ErrorExit:
    if (!pszPrinterName)
    {
        (void)LocalFree((HLOCAL)pszPrinterName);
    }

    SetLastError(err);
    return (HANDLE)0x0;
}

_Success_(return == TRUE)
BOOL
PP_DeletePrinter
(
    _In_ HANDLE  hPrinter
)
{
    LPWSTR pszPrinterName = NULL ;
    DWORD err = NO_ERROR;
    DWORD DoesPortExist = FALSE;

    UNREFERENCED_PARAMETER(hPrinter);

    pszPrinterName = (LPWSTR)LocalAlloc(LPTR,sizeof(WCHAR)*MAX_PATH);

    if (pszPrinterName == NULL)
    {
        err = ERROR_NOT_ENOUGH_MEMORY;
        return FALSE;
    }

    if (!err && PortExists(pszPrinterName, &DoesPortExist) && DoesPortExist)
    {
        if (DeleteRegistryEntry(pszPrinterName))
        {
            (void) DeletePortEntry(pszPrinterName);
        }
    }

    if (err)
    {
        SetLastError(err);
    }
    return (err == NO_ERROR);
}

_Success_(return == TRUE)
BOOL
PP_DeletePrinterConnection
(
    _In_ LPWSTR  pszName
)
{
    UNREFERENCED_PARAMETER(pszName);

    SetLastError(ERROR_INVALID_NAME);
    return FALSE;
}

_Success_(return == TRUE)
BOOL
PP_AddPrinterDriver
(
    _In_ LPWSTR  pszName,
    _In_ DWORD   dwLevel,
    _In_ LPBYTE  pbPrinter
)
{
    UNREFERENCED_PARAMETER(pbPrinter);
    UNREFERENCED_PARAMETER(dwLevel);
    UNREFERENCED_PARAMETER(pszName);

    SetLastError(ERROR_INVALID_NAME);
    return FALSE;
}

_Success_(return == TRUE)
BOOL
PP_EnumPrinterDrivers
(
    _In_                    LPWSTR   pszName,
    _In_                    LPWSTR   pszEnvironment,
    _In_                    DWORD    dwLevel,
    _Out_writes_bytes_opt_(cbBuf) LPBYTE   pbDriverInfo,
    _In_                    DWORD    cbBuf,
    _Out_                   LPDWORD  pcbNeeded,
    _Out_                   LPDWORD  pcReturned
)
{
    UNREFERENCED_PARAMETER(pszName);
    UNREFERENCED_PARAMETER(pszEnvironment);
    UNREFERENCED_PARAMETER(dwLevel);
    UNREFERENCED_PARAMETER(pbDriverInfo);
    UNREFERENCED_PARAMETER(cbBuf);
    UNREFERENCED_PARAMETER(pcbNeeded);
    UNREFERENCED_PARAMETER(pcReturned);

    SetLastError(ERROR_INVALID_NAME);
    return FALSE;
}

_Success_(return == TRUE)
BOOL
PP_GetPrinterDriver
(
    _In_                    HANDLE   hPrinter,
    _In_opt_                LPWSTR   pszEnvironment,
    _In_                    DWORD    dwLevel,
    _Out_writes_bytes_opt_(cbBuf) LPBYTE   pbDriverInfo,
    _In_                    DWORD    cbBuf,
    _Out_                   LPDWORD  pcbNeeded
)
{
    UNREFERENCED_PARAMETER(hPrinter);
    UNREFERENCED_PARAMETER(pszEnvironment);
    UNREFERENCED_PARAMETER(dwLevel);
    UNREFERENCED_PARAMETER(cbBuf);
    UNREFERENCED_PARAMETER(pbDriverInfo);
    UNREFERENCED_PARAMETER(pcbNeeded);

    SetLastError(ERROR_NOT_SUPPORTED);
    return FALSE;
}

_Success_(return == TRUE)
BOOL
PP_GetPrinterDriverDirectory
(
    _In_                    LPWSTR   pszName,
    _In_opt_                LPWSTR   pszEnvironment,
    _In_                    DWORD    dwLevel,
    _Out_writes_bytes_opt_(cbBuf) LPBYTE   pbDriverDirectory,
    _In_                    DWORD    cbBuf,
    _Out_                   LPDWORD  pcbNeeded
)
{
    UNREFERENCED_PARAMETER(pszName);
    UNREFERENCED_PARAMETER(pszEnvironment);
    UNREFERENCED_PARAMETER(dwLevel);
    UNREFERENCED_PARAMETER(cbBuf);
    UNREFERENCED_PARAMETER(pbDriverDirectory);
    UNREFERENCED_PARAMETER(pcbNeeded);

    SetLastError(ERROR_INVALID_NAME);
    return FALSE;
}

_Success_(return == TRUE)
BOOL
PP_DeletePrinterDriver
(
    _In_ LPWSTR  pszName,
    _In_ LPWSTR  pszEnvironment,
    _In_ LPWSTR  pszDriverName
)
{
    UNREFERENCED_PARAMETER(pszName);
    UNREFERENCED_PARAMETER(pszEnvironment);
    UNREFERENCED_PARAMETER(pszDriverName);

    SetLastError(ERROR_INVALID_NAME);
    return FALSE;
}

_Success_(return == TRUE)
BOOL
PP_AddPrintProcessor
(
    _In_ LPWSTR  pszName,
    _In_ LPWSTR  pszEnvironment,
    _In_ LPWSTR  pszPathName,
    _In_ LPWSTR  pszPrintProcessorName
)
{
    UNREFERENCED_PARAMETER(pszName);
    UNREFERENCED_PARAMETER(pszEnvironment);
    UNREFERENCED_PARAMETER(pszPathName);
    UNREFERENCED_PARAMETER(pszPrintProcessorName);

    SetLastError(ERROR_INVALID_NAME);
    return FALSE;
}

_Success_(return == TRUE)
BOOL
PP_EnumPrintProcessors
(
    _In_                    LPWSTR   pszName,
    _In_opt_                LPWSTR   pszEnvironment,
    _In_                    DWORD    dwLevel,
    _Out_writes_bytes_opt_(cbBuf) LPBYTE   pbPrintProcessorInfo,
    _In_                    DWORD    cbBuf,
    _Out_                   LPDWORD  pcbNeeded,
    _Out_                   LPDWORD  pcReturned
)
{
    UNREFERENCED_PARAMETER(pszName);
    UNREFERENCED_PARAMETER(pszEnvironment);
    UNREFERENCED_PARAMETER(dwLevel);
    UNREFERENCED_PARAMETER(cbBuf);
    UNREFERENCED_PARAMETER(pbPrintProcessorInfo);
    UNREFERENCED_PARAMETER(pcbNeeded);
    UNREFERENCED_PARAMETER(pcReturned);

    SetLastError(ERROR_INVALID_NAME);
    return FALSE;
}

_Success_(return == TRUE)
BOOL
PP_EnumPrintProcessorDatatypes
(
    _In_                    LPWSTR   pszName,
    _In_opt_                LPWSTR   pszPrintProcessorName,
    _In_                    DWORD    dwLevel,
    _Out_writes_bytes_opt_(cbBuf) LPBYTE   pbDatatypes,
    _In_                    DWORD    cbBuf,
    _Out_                   LPDWORD  pcbNeeded,
    _Out_                   LPDWORD  pcReturned
)
{
    UNREFERENCED_PARAMETER(pszName);
    UNREFERENCED_PARAMETER(pszPrintProcessorName);
    UNREFERENCED_PARAMETER(dwLevel);
    UNREFERENCED_PARAMETER(cbBuf);
    UNREFERENCED_PARAMETER(pbDatatypes);
    UNREFERENCED_PARAMETER(pcbNeeded);
    UNREFERENCED_PARAMETER(pcReturned);

    SetLastError(ERROR_INVALID_NAME);
    return FALSE;
}

_Success_(return == TRUE)
BOOL
PP_GetPrintProcessorDirectory
(
    _In_                    LPWSTR   pszName,
    _In_opt_                LPWSTR   pszEnvironment,
    _In_                    DWORD    dwLevel,
    _Out_writes_bytes_opt_(cbBuf) LPBYTE   pbPrintProcessorDirectory,
    _In_                    DWORD    cbBuf,
    _Out_                   LPDWORD  pcbNeeded
)
{
    UNREFERENCED_PARAMETER(pszName);
    UNREFERENCED_PARAMETER(pszEnvironment);
    UNREFERENCED_PARAMETER(dwLevel);
    UNREFERENCED_PARAMETER(cbBuf);
    UNREFERENCED_PARAMETER(pbPrintProcessorDirectory);
    UNREFERENCED_PARAMETER(pcbNeeded);

    SetLastError(ERROR_INVALID_NAME);
    return FALSE;
}

_Success_(return == TRUE)
BOOL
PP_StartPagePrinter
(
    _In_ HANDLE  hPrinter
)
{
    UNREFERENCED_PARAMETER(hPrinter);

    SetLastError(ERROR_NOT_SUPPORTED);
    return FALSE;
}

_Success_(return == TRUE)
BOOL
PP_EndPagePrinter
(
    _In_ HANDLE  hPrinter
)
{
    UNREFERENCED_PARAMETER(hPrinter);

    SetLastError(ERROR_NOT_SUPPORTED);
    return FALSE;
}

_Success_(return == TRUE)
BOOL
PP_ReadPrinter
(
    _In_  HANDLE   hPrinter,
    _Out_ LPVOID   pBuf,
    _In_  DWORD    cbBuf,
    _Out_ LPDWORD  pcbRead
)
{
    UNREFERENCED_PARAMETER(hPrinter);
    UNREFERENCED_PARAMETER(cbBuf);
    UNREFERENCED_PARAMETER(pBuf);
    UNREFERENCED_PARAMETER(pcbRead);

    SetLastError(ERROR_NOT_SUPPORTED);
    return FALSE;
}

_Success_(return == TRUE)
DWORD
PP_GetPrinterData
(
    _In_                    HANDLE   hPrinter,
    _In_                    LPWSTR   pszValueName,
    _Out_                   LPDWORD  pdwType,
    _Out_writes_bytes_opt_(cbBuf) LPBYTE   pbData,
    _In_                    DWORD    cbBuf,
    _Out_                   LPDWORD  pcbNeeded
)
{
    UNREFERENCED_PARAMETER(hPrinter);
    UNREFERENCED_PARAMETER(pszValueName);
    UNREFERENCED_PARAMETER(cbBuf);
    UNREFERENCED_PARAMETER(pdwType);
    UNREFERENCED_PARAMETER(pbData);
    UNREFERENCED_PARAMETER(pcbNeeded);

    SetLastError(ERROR_NOT_SUPPORTED);
    return FALSE;
}

_Success_(return == TRUE)
DWORD
PP_SetPrinterData
(
    _In_                HANDLE  hPrinter,
    _In_                LPWSTR  pszValueName,
    _In_                DWORD   dwType,
    _In_reads_bytes_(cbData) LPBYTE  pbData,
    _In_                DWORD   cbData
)
{
    UNREFERENCED_PARAMETER(hPrinter);
    UNREFERENCED_PARAMETER(pszValueName);
    UNREFERENCED_PARAMETER(dwType);
    UNREFERENCED_PARAMETER(pbData);
    UNREFERENCED_PARAMETER(cbData);

    SetLastError(ERROR_NOT_SUPPORTED);
    return FALSE;
}

_Success_(return == TRUE)
BOOL
PP_AddForm
(
    _In_   HANDLE  hPrinter,
    _In_   DWORD   dwLevel,
    _In_   LPBYTE  pbForm
)
{
    UNREFERENCED_PARAMETER(hPrinter);
    UNREFERENCED_PARAMETER(dwLevel);
    UNREFERENCED_PARAMETER(pbForm);

    SetLastError(ERROR_NOT_SUPPORTED);
    return FALSE;
}

_Success_(return == TRUE)
BOOL
PP_DeleteForm
(
    _In_   HANDLE  hPrinter,
    _In_   LPWSTR  pszFormName
)
{
    UNREFERENCED_PARAMETER(hPrinter);
    UNREFERENCED_PARAMETER(pszFormName);

    SetLastError(ERROR_NOT_SUPPORTED);
    return FALSE;
}

_Success_(return == TRUE)
BOOL
PP_GetForm
(
    _In_                    HANDLE   hPrinter,
    _In_                    LPWSTR   pszFormName,
    _In_                    DWORD    dwLevel,
    _Out_writes_bytes_opt_(cbBuf) LPBYTE   pbForm,
    _In_                    DWORD    cbBuf,
    _Out_                   LPDWORD  pcbNeeded
)
{
    UNREFERENCED_PARAMETER(hPrinter);
    UNREFERENCED_PARAMETER(pszFormName);
    UNREFERENCED_PARAMETER(dwLevel);
    UNREFERENCED_PARAMETER(cbBuf);
    UNREFERENCED_PARAMETER(pbForm);
    UNREFERENCED_PARAMETER(pcbNeeded);

    SetLastError(ERROR_NOT_SUPPORTED);
    return FALSE;
}

_Success_(return == TRUE)
BOOL
PP_SetForm
(
    _In_ HANDLE  hPrinter,
    _In_ LPWSTR  pszFormName,
    _In_ DWORD   dwLevel,
    _In_ LPBYTE  pbForm
)
{
    UNREFERENCED_PARAMETER(hPrinter);
    UNREFERENCED_PARAMETER(pszFormName);
    UNREFERENCED_PARAMETER(dwLevel);
    UNREFERENCED_PARAMETER(pbForm);

    SetLastError(ERROR_NOT_SUPPORTED);
    return FALSE;
}

_Success_(return == TRUE)
BOOL
PP_EnumForms
(
    _In_                    HANDLE   hPrinter,
    _In_                    DWORD    dwLevel,
    _Out_writes_bytes_opt_(cbBuf) LPBYTE   pbForm,
    _In_                    DWORD    cbBuf,
    _Out_                   LPDWORD  pcbNeeded,
    _Out_                   LPDWORD  pcReturned
)
{
    UNREFERENCED_PARAMETER(hPrinter);
    UNREFERENCED_PARAMETER(dwLevel);
    UNREFERENCED_PARAMETER(cbBuf);
    UNREFERENCED_PARAMETER(pbForm);
    UNREFERENCED_PARAMETER(pcbNeeded);
    UNREFERENCED_PARAMETER(pcReturned);

    SetLastError(ERROR_NOT_SUPPORTED);
    return FALSE;
}

_Success_(return != NULL)
HANDLE
PP_CreatePrinterIC
(
    _In_ HANDLE     hPrinter,
    _In_ LPDEVMODE  pDevMode
)
{
    UNREFERENCED_PARAMETER(hPrinter);
    UNREFERENCED_PARAMETER(pDevMode);

    SetLastError(ERROR_NOT_SUPPORTED);
    return NULL;
}

_Success_(return == TRUE)
BOOL
PP_PlayGdiScriptOnPrinterIC
(
    _In_                    HANDLE  hPrinterIC,
    _In_reads_bytes_(cbIn)       LPBYTE  pbIn,
    _In_                    DWORD   cbIn,
    _Out_writes_bytes_opt_(cbOut) LPBYTE  pbOut,
    _In_                    DWORD   cbOut,
    _In_                    DWORD   ul
)
{
    UNREFERENCED_PARAMETER(hPrinterIC);
    UNREFERENCED_PARAMETER(pbIn);
    UNREFERENCED_PARAMETER(cbIn);
    UNREFERENCED_PARAMETER(cbOut);
    UNREFERENCED_PARAMETER(ul);
    UNREFERENCED_PARAMETER(pbOut);

    SetLastError(ERROR_NOT_SUPPORTED);
    return FALSE;
}

_Success_(return == TRUE)
BOOL
PP_DeletePrinterIC
(
    _In_ HANDLE  hPrinterIC
)
{
    UNREFERENCED_PARAMETER(hPrinterIC);

    SetLastError(ERROR_NOT_SUPPORTED);
    return FALSE;
}

_Success_(return == NO_ERROR)
DWORD
PP_PrinterMessageBox
(
    _In_ HANDLE  hPrinter,
    _In_ DWORD   dwError,
    _In_ HWND    hWnd,
    _In_ LPWSTR  pszText,
    _In_ LPWSTR  pszCaption,
    _In_ DWORD   dwType
)
{
    UNREFERENCED_PARAMETER(hPrinter);
    UNREFERENCED_PARAMETER(dwError);
    UNREFERENCED_PARAMETER(hWnd);
    UNREFERENCED_PARAMETER(pszText);
    UNREFERENCED_PARAMETER(pszCaption);
    UNREFERENCED_PARAMETER(dwType);

    SetLastError(ERROR_NOT_SUPPORTED);
    return ERROR_NOT_SUPPORTED;
}

_Success_(return == TRUE)
BOOL
PP_AddMonitor
(
    _In_ LPWSTR  pszName,
    _In_ DWORD   dwLevel,
    _In_ LPBYTE  pbMonitorInfo
)
{
    UNREFERENCED_PARAMETER(pszName);
    UNREFERENCED_PARAMETER(dwLevel);
    UNREFERENCED_PARAMETER(pbMonitorInfo);

    SetLastError(ERROR_INVALID_NAME);
    return FALSE;
}

_Success_(return == TRUE)
BOOL
PP_DeleteMonitor
(
    _In_ LPWSTR  pszName,
    _In_ LPWSTR  pszEnvironment,
    _In_ LPWSTR  pszMonitorName
)
{
    UNREFERENCED_PARAMETER(pszName);
    UNREFERENCED_PARAMETER(pszEnvironment);
    UNREFERENCED_PARAMETER(pszMonitorName);

    SetLastError(ERROR_INVALID_NAME);
    return FALSE;
}

_Success_(return == TRUE)
BOOL
PP_DeletePrintProcessor
(
    _In_ LPWSTR  pszName,
    _In_ LPWSTR  pszEnvironment,
    _In_ LPWSTR  pszPrintProcessorName
)
{
    UNREFERENCED_PARAMETER(pszName);
    UNREFERENCED_PARAMETER(pszEnvironment);
    UNREFERENCED_PARAMETER(pszPrintProcessorName);

    SetLastError(ERROR_INVALID_NAME);
    return FALSE;
}

Our Services

  • What our customers say about us?

© 2011-2024 All Rights Reserved. Joya Systems. 4425 South Mopac Building II Suite 101 Austin, TX 78735 Tel: 800-DEV-KERNEL

Privacy Policy. Terms of use. Valid XHTML & CSS