SplEnumDevice

This function lists print device on a server, optionally supplying status information.

Syntax
SplEnumDevice(pszComputerName, ulLevel, pBuf, cbBuf, pcReturned, pcTotal, pcbNeeded, pReserved);

Parameters

 * pszComputerName (PSZ) - input
 * Name of computer where print devices are to. be listed.


 * A NULL string specifies the local workstation.


 * ulLevel (ULONG) - input
 * Level of detail required.


 * This must be 0, 2 or 3.


 * pBuf (PVOID) - output
 * Buffer.


 * The returned contents of the buffer depend on the value indicated in ulLevel as follows:


 * ulLevel Buffer Contents
 * 0 An array of port names. Each name consists of 9 characters, including a null terminator.
 * 2 An array of print device names of type PSZ.
 * 3 An array of PRDINFO3 structures.


 * If no job is printing on the print device, bits 2-11 of fsStatus in the PRDINFO3 data structure are meaningless.


 * cbBuf (ULONG) - input
 * Size, in bytes, of Buffer.


 * It must be greater than 0.


 * pcReturned (PULONG) - output
 * Number of entries returned.


 * pcTotal (PULONG) - output
 * Number of entries available.


 * pcbNeeded (PULONG) - output
 * Size in bytes of available information.


 * A value of 0 specifies that the size is not known.


 * pReserved (PVOID) - output
 * Reserved value, must be NULL.

Returns

 * rc (SPLERR) - returns
 * Return code.


 * NO_ERROR (0)
 * No errors occurred.
 * ERROR_NOT_SUPPORTED (50)
 * This request is not supported by the network.
 * ERROR_BAD_NETPATH (53)
 * The network path cannot be located.
 * ERROR_INVALID_PARAMETER (87)
 * An invalid parameter is specified.
 * ERROR_INVALID_LEVEL (124)
 * The level parameter is invalid.
 * ERROR_MORE_DATA (234)
 * Additional data is available.
 * NERR_NetNotStarted (2102)
 * The network program is not started.
 * NERR_InvalidComputer (2351)
 * The computer name is invalid.

Sample
This sample code enumerates all the devices on the local workstation. It then prints out the information.
 * 1) define INCL_BASE
 * 2) define INCL_DOSMEMMGR
 * 3) define INCL_SPL
 * 4) define INCL_SPLDOSPRINT
 * 5) define INCL_SPLERRORS


 * 1) include 
 * 2) include 

INT main {  ULONG  cbBuf ; ULONG cTotal; ULONG cReturned ; ULONG cbNeeded ; ULONG ulLevel = 3L; ULONG i ; SPLERR splerr ; PSZ   pszComputerName ; PBYTE pBuf ; PPRDINFO3 pprd3 ;

pszComputerName = (PSZ)NULL ;

/* Make the call with cBuf = 0 so that you will get the size of the */ /* buffer needed returned in cbNeeded. */  splerr = SplEnumDevice(pszComputerName, ulLevel, pBuf, 0L, /* cbBuf */                            &cReturned, &cTotal, &cbNeeded,                            NULL) ;

/* Only continue if the error codes ERROR_MORE_DATA or      */ /* NERR_BufTooSmall are returned. */  if (splerr == ERROR_MORE_DATA || splerr == NERR_BufTooSmall) {     /* Allocate memory for the buffer that will hold the returning info. */     if (!DosAllocMem( &pBuf, cbNeeded, PAG_READ|PAG_WRITE|PAG_COMMIT) ) {        cbBuf = cbNeeded ;

/* Make call again with the proper buffer size. */        splerr = SplEnumDevice(pszComputerName, ulLevel, pBuf, cbBuf,                                &cReturned, &cTotal,                                &cbNeeded, NULL) ;

/* If no errors, print out the buffer information. */        if (splerr == NO_ERROR) {           for (i=0;i < cReturned ; i++) {              /* Each time through the loop increase the pointer. */              pprd3 = (PPRDINFO3)pBuf+i ; printf("Device info:pszPrinterName  - %s\n",                            pprd3->pszPrinterName) ; printf(" pszUserName - %s\n", pprd3->pszUserName); printf(" pszLogAddr  - %s\n", pprd3->pszLogAddr); printf(" uJobId      - %d  fsStatus - %X\n",                            pprd3->uJobId,  pprd3->fsStatus); printf(" pszStatus   - %s\n", pprd3->pszStatus); printf(" pszComment  - %s\n", pprd3->pszComment); printf(" pszDrivers  - %s\n", pprd3->pszDrivers); printf(" time        - %d usTimeOut - %X\n",                            pprd3->time,  pprd3->usTimeOut); }        }         DosFreeMem(pBuf) ; }  } /* end if  */ else {      printf("SplEnumDevice splerr=%ld, cTotal=%ld, cReturned=%ld, cbNeeded=%ld\n",              splerr, cTotal, cReturned, cbNeeded) ; }  DosExit( EXIT_PROCESS, 0 ) ; return(splerr); }  /* end main */

Call Sequence

 * 1) define INCL_SPL /* Or use INCL_PM, */
 * 2) include 

PSZ      pszComputerName;  /*  Name of computer where print devices are to. be listed. */ ULONG    ulLevel;          /*  Level of detail required. */ PVOID    pBuf;             /*  Buffer. */ ULONG    cbBuf;            /*  Size, in bytes, of Buffer. */ PULONG   pcReturned;       /*  Number of entries returned. */ PULONG   pcTotal;          /*  Number of entries available. */ PULONG   pcbNeeded;        /*  Size in bytes of available information. */ PVOID    pReserved;        /*  Reserved value, must be NULL. */ SPLERR   rc;               /*  Return code. */

rc = SplEnumDevice(pszComputerName, ulLevel,      pBuf, cbBuf, pcReturned, pcTotal, pcbNeeded,       pReserved);

Remarks
If ulLevel is set to 0, each port name in pBuf is truncated to 8 characters.

Related Functions

 * SplCreateDevice
 * SplDeleteDevice