Windows NT 4.0 source code leak
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.
 
 
 
 
 
 

237 lines
5.4 KiB

/******************************* MODULE HEADER *******************************
* oemdm.c
*
* OEM devmode related functions.
*
*
* Copyright (C) 1996 Microsoft Corporation.
*
****************************************************************************/
#include "rasuipch.h"
#pragma hdrstop("rasuipch.h")
/**************************** Function Header ********************************
* OEMDrvUpgradePrinter
*
* RETURNS:
* (BOOL) TRUE for success.
*
* HISTORY:
*****************************************************************************/
BOOL
OEMDrvUpgradePrinter(
HANDLE hPrinter,
DWORD dwLevel,
LPBYTE pDriverUpgradeInfo)
{
PRASDDUIINFO pInfo = 0;
BOOL b= TRUE;
TRY
/* Get UI info and call OEM.
*/
pInfo = pGetUIInfo(hPrinter, 0, eInfo, eNoChange, eNoHelp);
if (!pInfo) {
b = FALSE;
LEAVE;
}
if (pInfo->OEMUIInfo.UIEntryPoints[OEM_IDX_UPGRADE]) {
b = (* (OEM_UPGRADEFN) pInfo->OEMUIInfo.UIEntryPoints[
OEM_IDX_UPGRADE])(dwLevel, pDriverUpgradeInfo);
}
ENDTRY
FINALLY
if (pInfo) {
vReleaseUIInfo(&pInfo);
}
ENDFINALLY
return(b);
}
/**************************** Function Header ********************************
* OEMDrvDeviceCapabilities
*
* RETURNS:
* (DWORD)
*
* HISTORY:
*****************************************************************************/
DWORD
OEMDrvDeviceCapabilities(
PRASDDUIINFO pInfo,
HANDLE hPrinter,
PWSTR pDeviceName,
WORD iDevCap,
void *pvOutput,
DEVMODE *pDMIn)
{
DWORD result = GDI_ERROR;
ASSERT(pInfo);
TRY
if (pInfo && pInfo->OEMUIInfo.UIEntryPoints[OEM_IDX_DEVICECAPS]) {
result = (* (OEM_DEVCAPSFN) pInfo->OEMUIInfo.UIEntryPoints[
OEM_IDX_DEVICECAPS])(hPrinter, pDeviceName, iDevCap, pvOutput, pDMIn);
}
ENDTRY
FINALLY
ENDFINALLY
return(result);
}
/**************************** Function Header ********************************
* OEMDevQueryPrintEx
*
* RETURNS:
* (BOOL) TRUE if OEM can print this job.
*
* HISTORY:
*****************************************************************************/
BOOL
OEMDevQueryPrintEx(
PDEVQUERYPRINT_INFO pDQPInfo)
{
PRASDDUIINFO pInfo = 0;
BOOL b = TRUE;
OEMDQPPARAM dqp;
TRY
/* Get UI info and call OEM.
*/
pInfo = pGetUIInfo(pDQPInfo->hPrinter, 0, eInfo, eNoChange, eNoHelp);
if (!pInfo) {
LEAVE;
}
dqp.cbSize = sizeof(OEMDQPPARAM);
dqp.pDQPInfo = pDQPInfo;
dqp.pOEMDevmode = pGetOEMExtra(pDQPInfo->pDevMode);
if (pInfo->OEMUIInfo.UIEntryPoints[OEM_IDX_QUERYPRINT]) {
b = (* (OEM_QUERYPRINTFN) pInfo->OEMUIInfo.UIEntryPoints[
OEM_IDX_QUERYPRINT])(&dqp);
}
ENDTRY
FINALLY
if (pInfo) {
vReleaseUIInfo(&pInfo);
}
ENDFINALLY
return(b);
}
/**************************** Function Header ********************************
* dwGetDriverExtraSize
*
* RETURNS:
* (DWORD) Size of Rasdd's devmode, including OEM's extra data. This is
* the size of the current DEVMODE.
*
* HISTORY:
*
*****************************************************************************/
DWORD
dwGetDriverExtraSize(
PRASDDUIINFO pRasdduiInfo,
HANDLE hPrinter)
{
return(dwGetCurrentRasddExtraSize() + dwGetOEMDevmodeSize(pRasdduiInfo, hPrinter));
}
/**************************** Function Header ********************************
* dwGetDevmodeSize
*
* RETURNS:
* (DWORD) Size of Rasdd's devmode, including OEM's extra data.
*
* HISTORY:
*
*****************************************************************************/
DWORD
dwGetDevmodeSize(
PRASDDUIINFO pRasdduiInfo,
HANDLE hPrinter)
{
return(sizeof(DEVMODE) + dwGetDriverExtraSize(pRasdduiInfo, hPrinter));
}
/**************************** Function Header ********************************
* dwGetOEMDevmodeSize
*
* RETURNS:
* (DWORD) Size of OEM's extra devmode data.
*
* HISTORY:
*
*****************************************************************************/
DWORD
dwGetOEMDevmodeSize(
PRASDDUIINFO pRasdduiInfo,
HANDLE hPrinter)
{
DWORD cbNeeded = 0;
BOOL bReleaseUIInfo = FALSE;
TRY
/* Get UI info.
*/
if (pRasdduiInfo == 0) {
pRasdduiInfo = pGetUIInfo(hPrinter, 0, eInfo, eNoChange, eNoHelp);
/* If we don't have pRasdduiInfo by this point, either supplied or
* retrieved through hPrinter, abort.
*/
if (pRasdduiInfo == 0) {
LEAVE;
}
bReleaseUIInfo = TRUE;
}
/* If we do have pRasdduiInfo, use it if we already know the size.
* If not, continue and get it from OEM.
*/
else if (pRasdduiInfo->OEMUIInfo.dwDevmodeExtra != -1) {
cbNeeded = pRasdduiInfo->OEMUIInfo.dwDevmodeExtra;
LEAVE;
}
/* We should now have pRasdduiInfo. If there's no OEM or OEM has no devmode,
* we're done.
*/
if (!(pRasdduiInfo->OEMUIInfo.flags & OEMUI_HASCUSTOMUI) ||
!(pRasdduiInfo->OEMUIInfo.flags & OEMUI_HASDEVMODE)) {
LEAVE;
}
/* Call OEM.
*/
cbNeeded = dwLibGetOEMDevmodeSize(pRasdduiInfo->hPrinter, pRasdduiInfo->PI.pwstrModel,
pRasdduiInfo->OEMUIInfo.hOEMLib,
(OEM_DEVMODEFN) pRasdduiInfo->OEMUIInfo.UIEntryPoints[OEM_IDX_DEVMODE]);
pRasdduiInfo->OEMUIInfo.dwDevmodeExtra = cbNeeded;
ENDTRY
FINALLY
/* If we loaded UIIinfo just for this call, release it now.
*/
if (bReleaseUIInfo) {
vReleaseUIInfo(&pRasdduiInfo);
}
ENDFINALLY
return(cbNeeded);
}