|
|
/*************************************************************************
* * NTCAP.C * * NT NetWare routines * * Copyright (c) 1995 Microsoft Corporation * * $Log: N:\NT\PRIVATE\NW4\NWSCRIPT\VCS\NTCAP.C $ * * Rev 1.2 10 Apr 1996 14:23:04 terryt * Hotfix for 21181hq * * Rev 1.2 12 Mar 1996 19:54:36 terryt * Relative NDS names and merge * * Rev 1.1 22 Dec 1995 14:25:20 terryt * Add Microsoft headers * * Rev 1.0 15 Nov 1995 18:07:20 terryt * Initial revision. * * Rev 1.0 25 Aug 1995 15:41:14 terryt * Initial revision. * * *************************************************************************/
#include "common.h"
#include <ntddnwfs.h>
#include <nwapi.h>
#include <npapi.h>
#include "ntnw.h"
extern unsigned char NW_PROVIDERA[];
/********************************************************************
EndCapture
Routine Description:
Remove the local printer redirection
Arguments: LPTDevice - IN 1, 2, or 3 - the local printer #
Return Value: Error
*******************************************************************/ unsigned int EndCapture( unsigned char LPTDevice ) { char LPTname[] = "LPT1"; unsigned int dwRes;
LPTname[3] = '1' + LPTDevice - 1;
/*
* Should we check for non-NetWare printers? */
dwRes = WNetCancelConnection2A( LPTname, 0, TRUE );
if ( dwRes != NO_ERROR ) dwRes = GetLastError();
if ( dwRes == ERROR_EXTENDED_ERROR ) NTPrintExtendedError();
return dwRes; }
/********************************************************************
GetCaptureFlags
Routine Description:
Return info about the printer capture status. Note that the only options set on NT are on a per-user basis and can be changed with the control panel.
Arguments: LPTDevice - IN LPT device 1, 2 or 3 pCaptureFlagsRW - OUT Capture options pCaptureFlagsRO - OUT Capture options
Return Value:
*******************************************************************/ unsigned int GetCaptureFlags( unsigned char LPTDevice, PNETWARE_CAPTURE_FLAGS_RW pCaptureFlagsRW, PNETWARE_CAPTURE_FLAGS_RO pCaptureFlagsRO ) { LPBYTE Buffer ; DWORD dwErr ; HANDLE EnumHandle ; DWORD Count ; char LPTName[10]; DWORD BufferSize = 4096; char *remotename; char *p; DWORD dwPrintOptions ; LPTSTR pszPreferred ;
strcpy( LPTName, "LPT1" );
LPTName[3] = '1' + LPTDevice - 1;
pCaptureFlagsRO->LPTCaptureFlag = 0;
//
// allocate memory and open the enumeration
//
if (!(Buffer = LocalAlloc( LPTR, BufferSize ))) { DisplayMessage(IDR_NOT_ENOUGH_MEMORY); return 0xFFFF; }
dwErr = WNetOpenEnum(RESOURCE_CONNECTED, 0, 0, NULL, &EnumHandle) ; if (dwErr != WN_SUCCESS) { dwErr = GetLastError(); if ( dwErr == ERROR_EXTENDED_ERROR ) NTPrintExtendedError(); (void) LocalFree((HLOCAL) Buffer) ; return 0xFFFF; }
do {
Count = 0xFFFFFFFF ; BufferSize = 4096; dwErr = WNetEnumResourceA(EnumHandle, &Count, Buffer, &BufferSize) ;
if ((dwErr == WN_SUCCESS || dwErr == WN_NO_MORE_ENTRIES) && ( Count != 0xFFFFFFFF) ) { LPNETRESOURCEA lpNetResource ; DWORD i ;
lpNetResource = (LPNETRESOURCEA) Buffer ;
//
// search for our printer
//
for ( i = 0; i < Count; lpNetResource++, i++ ) { if ( lpNetResource->lpLocalName ) { if ( !_strcmpi(lpNetResource->lpLocalName, LPTName )) { if ( lpNetResource->lpProvider ) { if ( _strcmpi( lpNetResource->lpProvider, NW_PROVIDERA ) ) {
pCaptureFlagsRO->LPTCaptureFlag = 0; } else { remotename = lpNetResource->lpRemoteName; p = strchr (remotename + 2, '\\'); if ( !p ) return 0xffffffff; *p++ = '\0'; _strupr( remotename+2 ); _strupr( p ); strcpy( pCaptureFlagsRO->ServerName, remotename+2 ); strcpy( pCaptureFlagsRO->QueueName, p ); pCaptureFlagsRO->LPTCaptureFlag = 1;
pCaptureFlagsRW->JobControlFlags = 0; pCaptureFlagsRW->TabSize = 8; pCaptureFlagsRW->NumCopies = 1; //
// query NW wksta for print options
// & preferred server
//
if ( NwQueryInfo(&dwPrintOptions, &pszPreferred)) { pCaptureFlagsRW->PrintFlags = CAPTURE_FLAG_NOTIFY | CAPTURE_FLAG_PRINT_BANNER ; } else { pCaptureFlagsRW->PrintFlags = 0; if ( dwPrintOptions & NW_PRINT_PRINT_NOTIFY ) pCaptureFlagsRW->PrintFlags |= CAPTURE_FLAG_NOTIFY; if ( dwPrintOptions & NW_PRINT_SUPPRESS_FORMFEED) pCaptureFlagsRW->PrintFlags |= CAPTURE_FLAG_NO_FORMFEED; if ( dwPrintOptions & NW_PRINT_PRINT_BANNER ) pCaptureFlagsRW->PrintFlags |= CAPTURE_FLAG_PRINT_BANNER; } pCaptureFlagsRW->FormName[0] = 0; pCaptureFlagsRW->FormType = 0; pCaptureFlagsRW->BannerText[0] = 0; pCaptureFlagsRW->FlushCaptureTimeout = 0; pCaptureFlagsRW->FlushCaptureOnClose = 1; } } else { pCaptureFlagsRO->LPTCaptureFlag = 0; } (void) WNetCloseEnum(EnumHandle) ; (void) LocalFree((HLOCAL) Buffer) ; return 0; } } } }
} while (dwErr == WN_SUCCESS) ;
if ( ( dwErr != WN_SUCCESS ) && ( dwErr != WN_NO_MORE_ENTRIES ) ) { dwErr = GetLastError(); if ( dwErr == ERROR_EXTENDED_ERROR ) NTPrintExtendedError(); }
(void ) WNetCloseEnum(EnumHandle) ; (void) LocalFree((HLOCAL) Buffer) ;
return 0; }
/********************************************************************
StartQueueCapture
Routine Description:
Attach local name to the queue.
Arguments: ConnectionHandle - IN Handle to file server LPTDevice - IN LPT 1, 2 or 3 pServerName - IN Server name pQueueName - IN Printer queue name
Return Value:
*******************************************************************/ unsigned int StartQueueCapture( unsigned int ConnectionHandle, unsigned char LPTDevice, unsigned char *pServerName, unsigned char *pQueueName ) { NETRESOURCEA NetResource; DWORD dwRes, dwSize; unsigned char * pszRemoteName = NULL; unsigned char pszLocalName[10]; char * p;
//
// validate parameters
//
if (!pServerName || !pQueueName || !LPTDevice) { DisplayMessage(IDR_ERROR_DURING, "StartQueueCapture"); return 0xffffffff ; }
//
// allocate memory for string
//
dwSize = strlen(pServerName) + strlen(pQueueName) + 5 ; if (!(pszRemoteName = (unsigned char *)LocalAlloc( LPTR, dwSize))) { DisplayMessage(IDR_NOT_ENOUGH_MEMORY); dwRes = 0xffffffff; goto ExitPoint ; }
sprintf(pszRemoteName, "\\\\%s\\%s", pServerName, pQueueName); sprintf(pszLocalName, "LPT%d", LPTDevice );
NetResource.dwScope = 0 ; NetResource.dwUsage = 0 ; NetResource.dwType = RESOURCETYPE_PRINT; NetResource.lpLocalName = pszLocalName; NetResource.lpRemoteName = pszRemoteName; NetResource.lpComment = NULL; // NetResource.lpProvider = NW_PROVIDERA ;
// Allow OS to select provider in case localized name doesn't map to OEM code page
NetResource.lpProvider = NULL;
//
// make the connection
//
dwRes=WNetAddConnection2A ( &NetResource, NULL, NULL, 0 );
if ( dwRes != NO_ERROR ) dwRes = GetLastError();
ExitPoint:
if (pszRemoteName) (void) LocalFree((HLOCAL) pszRemoteName) ;
return( dwRes ); }
|