3.1.4.3.4 RpcAddJob (Opnum 24)

RpcAddJob does not perform any function but returns a nonzero Windows error code to indicate failure.

 DWORD RpcAddJob(
   [in] PRINTER_HANDLE hPrinter,
   [in] DWORD Level,
   [in, out, unique, size_is(cbBuf), disable_consistency_check] 
     BYTE* pAddJob,
   [in] DWORD cbBuf,
   [out] DWORD* pcbNeeded
 );

hPrinter: A handle to a printer object that was opened using RpcAddPrinter (section 3.1.4.2.3), RpcAddPrinterEx (section 3.1.4.2.15), RpcOpenPrinter (section 3.1.4.2.2), or RpcOpenPrinterEx (section 3.1.4.2.14).

Level: A value that MUST be 0x00000001, 0x00000002 or 0x00000003.

pAddJob: A pointer to a buffer of undefined values. This value can be NULL if cbBuf is zero and Level is 0x00000001.

cbBuf: The size, in bytes, of the buffer pointed to by pAddJob. If Level is 0x00000002 or 0x00000003, this value SHOULD be greater than or equal to 10 bytes.

pcbNeeded: A pointer to a variable that SHOULD receive zero.

Return Values: This method MUST return a nonzero Windows error code to indicate failure [MS-ERREF].

Upon receiving this message, the server SHOULD validate parameters as follows:

  • Verify that Level is valid, and if this verification fails, return ERROR_INVALID_LEVEL.

  • If Level is 0x0000002 or 0x0000003, verify the following:

    • The value of cbBuf is greater than or equal to 10 bytes on 32-bit implementations and 18 bytes on 64-bit implementations. If this verification fails, return ERROR_INVALID_DATATYPE.

    • At offset 0 from the beginning of the pAddJob buffer, there is a 32-bit value on 32-bit implementations and a 64-bit value on 64-bit implementations, between 0 and cbBuf, inclusive. If this verification fails, return ERROR_INVALID_LEVEL.

    If parameter validation fails, the server SHOULD fail the operation immediately and return a nonzero error response to the client. Otherwise, the server MUST return ERROR_INVALID_PARAMETER.

This method MUST be implemented to ensure compatibility with protocol clients.