207 lines
4.9 KiB
C
207 lines
4.9 KiB
C
#include "precomp.h"
|
|
#pragma hdrstop
|
|
/*++
|
|
|
|
Copyright (c) 1990 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
printer.c
|
|
|
|
Abstract:
|
|
|
|
Printer module for Win32 PDK Setup.
|
|
This module has no external dependencies and is not statically linked
|
|
to any part of Setup.
|
|
|
|
Author:
|
|
|
|
Sunil Pai (sunilp) March 1992
|
|
|
|
--*/
|
|
|
|
|
|
//
|
|
// Get Windows system printer directory
|
|
//
|
|
CB
|
|
GetPrinterDriverDir(
|
|
IN RGSZ Args,
|
|
IN USHORT cArgs,
|
|
OUT SZ ReturnBuffer,
|
|
IN CB cbReturnBuffer
|
|
)
|
|
{
|
|
DWORD cbRet = 0;
|
|
SZ szServerName = NULL ;
|
|
SZ szEnvironment = NULL ;
|
|
|
|
Unused(Args);
|
|
Unused(cArgs);
|
|
|
|
if ( (cArgs >= 2) ) {
|
|
|
|
if (*(Args[0]) != '\0') {
|
|
szServerName = Args[0];
|
|
}
|
|
|
|
if (*(Args[1]) != '\0') {
|
|
szEnvironment = Args[1];
|
|
}
|
|
|
|
}
|
|
|
|
GetPrinterDriverDirectory(
|
|
szServerName, // pName
|
|
szEnvironment, // pEnvironment
|
|
1, // Level
|
|
ReturnBuffer, // pDriverDirectory
|
|
cbReturnBuffer, // cbBuf
|
|
&cbRet // pcbNeeded
|
|
);
|
|
|
|
if ( cbRet == 0 ) {
|
|
ReturnBuffer[0] = '\0';
|
|
}
|
|
|
|
return lstrlen(ReturnBuffer)+1;
|
|
}
|
|
|
|
|
|
BOOL
|
|
AddPrinterDriverWorker(
|
|
IN LPSTR Model,
|
|
IN LPSTR Environment,
|
|
IN LPSTR Driver,
|
|
IN LPSTR DataFile,
|
|
IN LPSTR ConfigFile,
|
|
IN LPSTR Server
|
|
)
|
|
{
|
|
DRIVER_INFO_2 DriverInfo2;
|
|
|
|
ZeroMemory( &DriverInfo2, sizeof(DRIVER_INFO_2) );
|
|
DriverInfo2.cVersion = 0;
|
|
DriverInfo2.pName = Model; // QMS 810
|
|
DriverInfo2.pEnvironment = Environment; // W32x86
|
|
DriverInfo2.pDriverPath = Driver; // c:\drivers\pscript.dll
|
|
DriverInfo2.pDataFile = DataFile; // c:\drivers\QMS810.PPD
|
|
DriverInfo2.pConfigFile = ConfigFile; // c:\drivers\PSCRPTUI.DLL
|
|
|
|
if(AddPrinterDriver(Server, 2, (LPBYTE)&DriverInfo2)) {
|
|
SetReturnText( "ADDED" );
|
|
} else {
|
|
switch(GetLastError()) {
|
|
case ERROR_PRINTER_DRIVER_ALREADY_INSTALLED:
|
|
SetReturnText( "PRESENT" );
|
|
break;
|
|
case ERROR_ACCESS_DENIED:
|
|
SetReturnText( "DENIED" );
|
|
break;
|
|
default:
|
|
SetReturnText( "ERROR" );
|
|
break;
|
|
}
|
|
}
|
|
return (TRUE);
|
|
}
|
|
|
|
|
|
BOOL
|
|
AddPrinterWorker(
|
|
IN LPSTR Name,
|
|
IN LPSTR Port,
|
|
IN LPSTR Model,
|
|
IN LPSTR Description,
|
|
IN LPSTR PrintProcessor,
|
|
IN DWORD Attributes,
|
|
IN LPSTR Server
|
|
)
|
|
{
|
|
PRINTER_INFO_2 PrinterInfo2;
|
|
HANDLE bStatus;
|
|
|
|
ZeroMemory( &PrinterInfo2, sizeof(PRINTER_INFO_2) );
|
|
PrinterInfo2.pServerName = NULL;
|
|
PrinterInfo2.pPrinterName = Name;
|
|
PrinterInfo2.pShareName = NULL;
|
|
PrinterInfo2.pPortName = Port;
|
|
PrinterInfo2.pDriverName = Model;
|
|
PrinterInfo2.pComment = Description;
|
|
PrinterInfo2.pLocation = NULL;
|
|
PrinterInfo2.pDevMode = (LPDEVMODE)NULL;
|
|
PrinterInfo2.pSepFile = NULL;
|
|
PrinterInfo2.pPrintProcessor = PrintProcessor;
|
|
PrinterInfo2.pDatatype = NULL;
|
|
PrinterInfo2.pParameters = NULL;
|
|
PrinterInfo2.Attributes = Attributes;
|
|
PrinterInfo2.Priority = 0;
|
|
PrinterInfo2.DefaultPriority = 0;
|
|
PrinterInfo2.StartTime = 0;
|
|
PrinterInfo2.UntilTime = 0;
|
|
PrinterInfo2.Status = 0;
|
|
PrinterInfo2.cJobs = 0;
|
|
PrinterInfo2.AveragePPM = 0;
|
|
|
|
bStatus = AddPrinter( Server, 2, (LPBYTE)&PrinterInfo2);
|
|
if ( bStatus != (HANDLE)NULL ) {
|
|
|
|
SetReturnText( "ADDED" );
|
|
ClosePrinter(bStatus);
|
|
return( TRUE );
|
|
|
|
}
|
|
else {
|
|
|
|
switch(GetLastError()) {
|
|
case ERROR_PRINTER_ALREADY_EXISTS:
|
|
SetReturnText( "PRESENT" );
|
|
break;
|
|
#if 0
|
|
case ERROR_ACCESS_DENIED:
|
|
SetReturnText( "DENIED" );
|
|
break;
|
|
#endif
|
|
default:
|
|
SetReturnText( "ERROR" );
|
|
break;
|
|
}
|
|
return( TRUE );
|
|
}
|
|
|
|
}
|
|
|
|
|
|
BOOL
|
|
AddPrinterMonitorWorker(
|
|
IN LPSTR Model,
|
|
IN LPSTR Environment,
|
|
IN LPSTR Driver,
|
|
IN LPSTR Server
|
|
)
|
|
{
|
|
MONITOR_INFO_2 MonitorInfo2;
|
|
|
|
ZeroMemory( &MonitorInfo2, sizeof(MONITOR_INFO_2) );
|
|
MonitorInfo2.pName = Model; // Local Port
|
|
MonitorInfo2.pEnvironment = Environment; // W32x86
|
|
MonitorInfo2.pDLLName = Driver; // c:\winnt\system32\localmon.dll
|
|
|
|
if(AddMonitor(Server, 2, (LPBYTE)&MonitorInfo2)) {
|
|
SetReturnText( "ADDED" );
|
|
} else {
|
|
switch(GetLastError()) {
|
|
case ERROR_ALREADY_EXISTS:
|
|
SetReturnText( "PRESENT" );
|
|
break;
|
|
case ERROR_ACCESS_DENIED:
|
|
SetReturnText( "DENIED" );
|
|
break;
|
|
default:
|
|
SetReturnText( "ERROR" );
|
|
break;
|
|
}
|
|
}
|
|
return (TRUE);
|
|
}
|