亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? devmode.cpp

?? win2000打印機驅(qū)動代碼
?? CPP
字號:
/*
 * @file lib/devmode.cpp Devmode operating function.
 *
 * W2kPrintDrvSample
 *
 * Copyright (C) 2004, terrificskyfox <terrificskyfox@yahoo.com.cn>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

#include "precomp.h"
#include "debug.h"
#include "oem.h"
#include "devmode.h"


/*
 *  Internal implementations
 */

/*
 * Function: fill_default_oemdev
 *
 * Purpose: Fill default oem DEVMODE.
 *
 * Return: size of oem DEVMODE
 */
static DWORD fill_default_oemdev(PDEVMODE pPubDevIn, POEMDEV pOemDevOut)
{
    // verify parameters
    if(pPubDevIn == NULL || pOemDevOut == NULL)
    {
        ERR(ERRORTEXT("fill_default_oemdev(), ERROR_INVALID_PARAMETER.\r\n"));
        return 0;
    }


	// init header
	pOemDevOut->dmKTExtra.dwSize = sizeof(OEMDEV);
	pOemDevOut->dmKTExtra.dwSignature = OEM_SIGNATURE;
	pOemDevOut->dmKTExtra.dwVersion = OEM_VERSION;

    // init peninfo
	for(short Loop = 0; Loop < NUM_COLORS; Loop++)
	{
		pOemDevOut->dmPenInfo[Loop].pibBitmaped = 
		pOemDevOut->dmPenInfo[Loop].pibPath = 
		pOemDevOut->dmPenInfo[Loop].pibText = TRUE;
	}

    // for internal use
    pOemDevOut->dmOldColor = pPubDevIn->dmColor;

	return sizeof(OEMDEV);
}

/*
 * Function: convert_devmode
 *
 * Purpose: Convert oem DEVMODE to current version, if necessary.
 *
 * Return: size of data copied
 */
static DWORD convert_devmode(PDEVMODE pPubDevIn, POEMDEV pOemDevIn, POEMDEV pOemDevOut)
{
    // verify parameters
    if(pPubDevIn == NULL || pOemDevIn == NULL || pOemDevOut == NULL)
    {
        ERR(ERRORTEXT("convert_devmode(), ERROR_INVALID_PARAMETER.\r\n"));
		return 0;
	}


	// check signature, if it doesn't match ours, just assume DMIn is bad and use defaults
	if(pOemDevIn->dmKTExtra.dwSignature == pOemDevOut->dmKTExtra.dwSignature)
	{
		// Step1:
		// Set the devmode defaults so that anything the isn't copied over will
		// be set to the default value.
		fill_default_oemdev(pPubDevIn, pOemDevOut);

		// Step2:
		// Copy the old structure in to the new using which ever size is the smaller.
		// Devmode maybe from newer Devmode (not likely since there is only one), or
		// Devmode maybe a newer Devmode, in which case it maybe larger,
		// but the first part of the structure should be the same.

		// DESIGN ASSUMPTION: the private DEVMODE structure only gets added to;
		// the fields that are in the DEVMODE never change only new fields get added to the end.

		CopyMemory(pOemDevOut, pOemDevIn, __min(pOemDevOut->dmKTExtra.dwSize, pOemDevIn->dmKTExtra.dwSize));

		// Step3:
		// Re-fill in the size and version fields to indicated 
		// that the DEVMODE is the current private DEVMODE version.
		pOemDevOut->dmKTExtra.dwSize       = sizeof(OEMDEV);
		pOemDevOut->dmKTExtra.dwVersion    = OEM_VERSION;

		return __min(pOemDevOut->dmKTExtra.dwSize, pOemDevIn->dmKTExtra.dwSize);
	}
	else
	{
		WARNING(("Unknown DEVMODE signature, pOemDevIn ignored.\r\n"));

		return fill_default_oemdev(pPubDevIn, pOemDevOut);
	}
}

/*
 * Function: validate_devmode
 *
 * Action: Validate oem DEVMODE.
 *
 * Return Value: BOOL
 */
static BOOL validate_devmode(POEMDEV pOemDevOut)
{
	// verify parameters
	if(pOemDevOut == NULL)
		return FALSE;

	// ASSUMPTION: pOemDev is large enough to contain OEMDEV structure

	// make sure that dmKTExtra indicates the current OEMDEV structure
	pOemDevOut->dmKTExtra.dwSize       = sizeof(OEMDEV);
	pOemDevOut->dmKTExtra.dwSignature  = OEM_SIGNATURE;
	pOemDevOut->dmKTExtra.dwVersion    = OEM_VERSION;

	// set OEM DEVMODE to default, if invalid

	return TRUE;
}


/*
 *  Implementations
 */

/*
 * Function: hrOEMDevMode
 *
 * Purpose: Surrogate IOEMUI::DevMode.
 *
 * Return: HRESULT
 */
HRESULT hrOEMDevMode(DWORD dwMode, POEMDMPARAM pOemDMParam)
{
	// verify parameters
	if((NULL == pOemDMParam)
	   ||
	   ((OEMDM_SIZE != dwMode) && (OEMDM_DEFAULT != dwMode) && (OEMDM_CONVERT != dwMode) && (OEMDM_MERGE != dwMode))
	  )
	{
		ERR(ERRORTEXT("DevMode(), ERROR_INVALID_PARAMETER.\r\n"));

		SetLastError(ERROR_INVALID_PARAMETER);
		return E_FAIL;
	}

	// cast generic (i.e. PVOID) to oem devomode pointer type
	POEMDEV pOemDevIn = (POEMDEV)pOemDMParam->pOEMDMIn;
	POEMDEV pOemDevOut = (POEMDEV)pOemDMParam->pOEMDMOut;

	switch(dwMode)
	{
	// return size of the memory needed to store oem DEVMODE
	case OEMDM_SIZE:
		pOemDMParam->cbBufSize = sizeof(OEMDEV);
		break;

	// fill the oem DEVMODE with default value
	case OEMDM_DEFAULT:
		pOemDMParam->cbBufSize = fill_default_oemdev(pOemDMParam->pPublicDMIn, pOemDevOut);
		break;

	case OEMDM_CONVERT:
		pOemDMParam->cbBufSize = convert_devmode(pOemDMParam->pPublicDMIn, pOemDevIn, pOemDevOut);
		break;

	case OEMDM_MERGE:
		convert_devmode(pOemDMParam->pPublicDMIn, pOemDevIn, pOemDevOut);
		validate_devmode(pOemDevOut);
		break;
	}

	return S_OK;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
狠狠色丁香婷综合久久| 五月婷婷综合激情| 亚洲 欧美综合在线网络| 五月天亚洲婷婷| 成人不卡免费av| 日韩丝袜美女视频| 一区二区久久久久| 国产 日韩 欧美大片| 欧美一卡二卡三卡| 亚洲资源中文字幕| 大尺度一区二区| 欧美成人猛片aaaaaaa| 一区二区三区四区高清精品免费观看| 国产一区二区三区高清播放| 欧美剧情片在线观看| 中文字幕免费在线观看视频一区| 蜜臀a∨国产成人精品| 欧美视频一区二区| 亚洲精品国产一区二区三区四区在线| 国产精品影视天天线| 欧美电视剧免费观看| 爽好久久久欧美精品| 欧美日韩成人在线| 亚洲国产日日夜夜| 欧美性猛片xxxx免费看久爱| 中文字幕亚洲精品在线观看| 成人综合在线视频| 国产精品婷婷午夜在线观看| 国产成人在线视频播放| 久久久91精品国产一区二区精品| 久久精品国产一区二区三区免费看| 精品视频在线免费观看| 亚洲午夜激情av| 欧美日韩精品一区二区天天拍小说| 亚洲老司机在线| 欧美午夜在线一二页| 亚洲第一成人在线| 欧美日韩高清影院| 免费一级欧美片在线观看| 日韩欧美一二三| 国产老肥熟一区二区三区| 国产午夜精品福利| aa级大片欧美| 亚洲午夜精品网| 欧美日韩精品一区二区三区四区| 亚洲成人高清在线| 欧美一级一区二区| 国产精品综合视频| 国产日韩成人精品| 成人avav影音| 尤物在线观看一区| 欧美一区二区三区爱爱| 麻豆成人91精品二区三区| 精品国产成人在线影院 | 精品国产一二三区| 国产精品一区二区在线观看不卡 | 亚洲欧美日本韩国| 欧美日韩一区国产| 久久精品国产免费| 国产精品国产三级国产aⅴ入口| 91在线高清观看| 日韩成人av影视| 久久综合久久综合久久| 一本久道久久综合中文字幕| 亚洲国产一区二区三区| 久久综合九色综合97婷婷女人| 成人免费黄色大片| 亚洲综合久久av| 日韩视频免费观看高清完整版在线观看 | 国产精品美女久久久久aⅴ | 国产91精品一区二区| 亚洲美女免费在线| 欧美tk—视频vk| 91在线porny国产在线看| 亚洲高清免费观看高清完整版在线观看| 欧美群妇大交群的观看方式| 国产激情视频一区二区在线观看 | 国产黑丝在线一区二区三区| 亚洲精品自拍动漫在线| 精品电影一区二区三区| 在线亚洲一区二区| 国产一区二区三区电影在线观看| 亚洲123区在线观看| 亚洲欧美在线另类| 久久久精品免费网站| 91精品午夜视频| 91官网在线免费观看| 成人激情免费电影网址| 激情综合色丁香一区二区| 午夜国产不卡在线观看视频| 日韩美女久久久| 国产片一区二区| 久久网这里都是精品| 91精品在线观看入口| 欧美日韩一区二区三区视频| 成人美女在线观看| 国产乱淫av一区二区三区| 美女诱惑一区二区| 午夜视频在线观看一区| 亚洲码国产岛国毛片在线| 国产精品理论片| 国产片一区二区| 久久久久88色偷偷免费| 精品久久久影院| 日韩久久久精品| 日韩一区二区免费高清| 欧美一区二区免费视频| 337p亚洲精品色噜噜狠狠| 欧美日韩国产高清一区| 欧美久久免费观看| 91麻豆精品91久久久久同性| 欧美日韩一区二区在线观看 | 99国产精品99久久久久久| 国产不卡视频在线观看| 国产精品亚洲午夜一区二区三区| 黄色成人免费在线| 久久 天天综合| 国产伦精品一区二区三区免费 | 欧美日韩视频在线一区二区| 91福利在线免费观看| 91精彩视频在线观看| 欧美图区在线视频| 在线播放国产精品二区一二区四区| 色域天天综合网| 欧美专区亚洲专区| 91麻豆精品国产91久久久资源速度 | 亚洲成a人片在线观看中文| 一区二区三区高清在线| 亚洲综合激情另类小说区| 亚洲日本青草视频在线怡红院| 久久久亚洲精华液精华液精华液| 日韩精品一区二区三区在线| 精品黑人一区二区三区久久| 久久综合久色欧美综合狠狠| 国产精品午夜久久| 亚洲精品视频免费观看| 五月天亚洲婷婷| 国产乱色国产精品免费视频| 99综合电影在线视频| 欧美影院一区二区三区| 8v天堂国产在线一区二区| 精品国产乱码久久久久久牛牛| 国产亚洲精品精华液| 亚洲男同性视频| 日本中文一区二区三区| 国产一区二区主播在线| www.66久久| 在线播放国产精品二区一二区四区| www国产精品av| 亚洲男人的天堂av| 另类小说欧美激情| 99久久精品一区| 在线播放/欧美激情| 国产欧美va欧美不卡在线| 亚洲国产精品人人做人人爽| 日韩一区精品视频| 成人动漫一区二区在线| 欧美二区在线观看| 中文子幕无线码一区tr| 日日摸夜夜添夜夜添亚洲女人| 国产经典欧美精品| 制服丝袜中文字幕一区| 国产精品久久久久国产精品日日| 亚洲成人三级小说| www.亚洲色图.com| 91精品国产综合久久婷婷香蕉| 日本一区二区三区四区| 蜜臀av亚洲一区中文字幕| 色婷婷综合五月| 国产欧美一区二区精品性| 天堂va蜜桃一区二区三区漫画版 | 欧美性xxxxx极品少妇| 中日韩免费视频中文字幕| 麻豆视频一区二区| 欧美日韩一区二区在线观看| 国产精品美女视频| 国产精品69毛片高清亚洲| 欧美一区二区观看视频| 亚洲午夜在线视频| 日本精品视频一区二区三区| 中文字幕免费观看一区| 国产自产2019最新不卡| 这里只有精品99re| 偷拍日韩校园综合在线| 91福利在线观看| 亚洲精品欧美专区| 99精品视频一区| 国产精品天天摸av网| 国产高清精品网站| 欧美精品一区二区三区蜜桃 | 在线精品观看国产| 国产精品久久久久婷婷| 国产成人高清在线| 久久久精品综合| 国产乱码精品一区二区三区忘忧草| 欧美岛国在线观看| 精品一区二区精品| 亚洲精品一线二线三线无人区| 久久精品国产秦先生| 久久新电视剧免费观看|