120 lines
2.3 KiB
C
120 lines
2.3 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (c) 1990-1994 Microsoft Corporation
|
||
|
All rights reserved
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
SplInit.c
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
Initialize the spooler.
|
||
|
|
||
|
Author:
|
||
|
|
||
|
Environment:
|
||
|
|
||
|
User Mode -Win32
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#include "precomp.h"
|
||
|
#pragma hdrstop
|
||
|
|
||
|
#include "client.h"
|
||
|
|
||
|
DWORD
|
||
|
TranslateExceptionCode(
|
||
|
DWORD ExceptionCode);
|
||
|
|
||
|
BOOL
|
||
|
SpoolerInit(
|
||
|
VOID)
|
||
|
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
--*/
|
||
|
|
||
|
{
|
||
|
WCHAR szDefaultPrinter[MAX_PATH * 2];
|
||
|
HKEY hKeyPrinters;
|
||
|
DWORD ReturnValue;
|
||
|
|
||
|
//
|
||
|
// Preserve the old device= string in case we can't initialize and
|
||
|
// must defer.
|
||
|
//
|
||
|
if (!RegOpenKeyEx(HKEY_CURRENT_USER,
|
||
|
szPrinters,
|
||
|
0,
|
||
|
KEY_WRITE|KEY_READ,
|
||
|
&hKeyPrinters)) {
|
||
|
|
||
|
//
|
||
|
// Attempt to retrieve the current default written out.
|
||
|
//
|
||
|
|
||
|
if (GetProfileString(szWindows,
|
||
|
szDevice,
|
||
|
szNULL,
|
||
|
szDefaultPrinter,
|
||
|
COUNTOF(szDefaultPrinter))) {
|
||
|
|
||
|
//
|
||
|
// If it exists, save it away in case we start later when
|
||
|
// the spooler hasn't started (which means we clear device=)
|
||
|
// and then restart the spooler and login.
|
||
|
//
|
||
|
|
||
|
RegSetValueEx(hKeyPrinters,
|
||
|
szDeviceOld,
|
||
|
0,
|
||
|
REG_SZ,
|
||
|
(PBYTE)szDefaultPrinter,
|
||
|
(wcslen(szDefaultPrinter)+1) *
|
||
|
sizeof(szDefaultPrinter[0]));
|
||
|
|
||
|
}
|
||
|
|
||
|
RegCloseKey(hKeyPrinters);
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// Clear out [devices] and [printerports] device=
|
||
|
//
|
||
|
WriteProfileString(szDevices, NULL, NULL);
|
||
|
WriteProfileString(szPrinterPorts, NULL, NULL);
|
||
|
WriteProfileString(szWindows, szDevice, NULL);
|
||
|
|
||
|
RpcTryExcept {
|
||
|
|
||
|
if (ReturnValue = RpcSpoolerInit((LPWSTR)szNULL)) {
|
||
|
|
||
|
SetLastError(ReturnValue);
|
||
|
ReturnValue = FALSE;
|
||
|
|
||
|
} else {
|
||
|
|
||
|
ReturnValue = TRUE;
|
||
|
}
|
||
|
|
||
|
} RpcExcept(I_RpcExceptionFilter(RpcExceptionCode())) {
|
||
|
|
||
|
SetLastError(TranslateExceptionCode(RpcExceptionCode()));
|
||
|
ReturnValue = FALSE;
|
||
|
|
||
|
} RpcEndExcept
|
||
|
|
||
|
return ReturnValue;
|
||
|
}
|
||
|
|