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