Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

206 lines
4.9 KiB

#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);
}