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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? generic.h

?? Programming the Microsoft Windows driver model.2nd 隨書光盤。內有很多作者送的實用工具和隨書源碼。WDM編程
?? H
字號:
// GENERIC.H -- Public interface to GENERIC.SYS

// Copyright (C) 1999 by Walter Oney

// All rights reserved



#ifndef GENERIC_H

#define GENERIC_H



#ifdef __cplusplus

	#define GENERICAPI extern "C" 

#else

	#define GENERICAPI

#endif



#ifdef GENERIC_INTERNAL

	#define GENERIC_EXPORT __declspec(dllexport) __stdcall

#else

	#define GENERIC_EXPORT __declspec(dllimport) __stdcall

	#pragma comment(lib, "generic.lib")

#endif



///////////////////////////////////////////////////////////////////////////////



typedef VOID (__stdcall *PQNOTIFYFUNC)(PVOID);



typedef struct _DEVQUEUE {

	LIST_ENTRY head;

	KSPIN_LOCK lock;

	PDRIVER_STARTIO StartIo;

	LONG stallcount;

	PIRP CurrentIrp;

	KEVENT evStop;

	PQNOTIFYFUNC notify;

	PVOID notifycontext;

	NTSTATUS abortstatus;

	} DEVQUEUE, *PDEVQUEUE;



GENERICAPI VOID		GENERIC_EXPORT InitializeQueue(PDEVQUEUE pdq, PDRIVER_STARTIO StartIo);

GENERICAPI VOID		GENERIC_EXPORT StartPacket(PDEVQUEUE pdq, PDEVICE_OBJECT fdo, PIRP Irp, PDRIVER_CANCEL cancel);

GENERICAPI PIRP		GENERIC_EXPORT StartNextPacket(PDEVQUEUE pdq, PDEVICE_OBJECT fdo);

GENERICAPI VOID		GENERIC_EXPORT CancelRequest(PDEVQUEUE pdq, PIRP Irp);

GENERICAPI VOID		GENERIC_EXPORT CleanupRequests(PDEVQUEUE pdq, PFILE_OBJECT fop, NTSTATUS status);

GENERICAPI VOID		GENERIC_EXPORT StallRequests(PDEVQUEUE pdq);

GENERICAPI VOID		GENERIC_EXPORT RestartRequests(PDEVQUEUE pdq, PDEVICE_OBJECT fdo);

GENERICAPI PIRP		GENERIC_EXPORT GetCurrentIrp(PDEVQUEUE pdq);

GENERICAPI BOOLEAN	GENERIC_EXPORT CheckBusyAndStall(PDEVQUEUE pdq);

GENERICAPI VOID		GENERIC_EXPORT WaitForCurrentIrp(PDEVQUEUE pdq);

GENERICAPI VOID		GENERIC_EXPORT AbortRequests(PDEVQUEUE pdq, NTSTATUS status);

GENERICAPI VOID		GENERIC_EXPORT AllowRequests(PDEVQUEUE pdq);

GENERICAPI NTSTATUS	GENERIC_EXPORT AreRequestsBeingAborted(PDEVQUEUE pdq);

GENERICAPI NTSTATUS GENERIC_EXPORT StallRequestsAndNotify(PDEVQUEUE pdq, PQNOTIFYFUNC notify, PVOID context);



// Multiple queue routines added in version 1.3:



GENERICAPI VOID		GENERIC_EXPORT CleanupAllRequests(PDEVQUEUE* q, ULONG nq, PFILE_OBJECT fop, NTSTATUS status);

GENERICAPI VOID		GENERIC_EXPORT StallAllRequests(PDEVQUEUE* q, ULONG nq);

GENERICAPI VOID		GENERIC_EXPORT RestartAllRequests(PDEVQUEUE* q, ULONG nq, PDEVICE_OBJECT fdo);

GENERICAPI BOOLEAN	GENERIC_EXPORT CheckAnyBusyAndStall(PDEVQUEUE* q, ULONG nq, PDEVICE_OBJECT fdo);

GENERICAPI VOID		GENERIC_EXPORT WaitForCurrentIrps(PDEVQUEUE* q, ULONG nq);

GENERICAPI VOID		GENERIC_EXPORT AbortAllRequests(PDEVQUEUE* q, ULONG nq, NTSTATUS status);

GENERICAPI VOID		GENERIC_EXPORT AllowAllRequests(PDEVQUEUE* q, ULONG nq);

GENERICAPI NTSTATUS GENERIC_EXPORT StallAllRequestsAndNotify(PDEVQUEUE* q, ULONG nq, PQNOTIFYFUNC notify, PVOID context);



///////////////////////////////////////////////////////////////////////////////



// The support routines for remove locking were not originally declared in WDM.H because they

// weren't implemented in Win98 Gold. The following declarations provide equivalent

// functionality on all WDM platforms.



typedef struct _GENERIC_REMOVE_LOCK {

	LONG usage;					// reference count

	BOOLEAN removing;			// true if removal is pending

	KEVENT evRemove;			// event to wait on

	} GENERIC_REMOVE_LOCK, *PGENERIC_REMOVE_LOCK;



GENERICAPI VOID		GENERIC_EXPORT GenericInitializeRemoveLock(PGENERIC_REMOVE_LOCK lock, ULONG tag, ULONG minutes, ULONG maxcount);

GENERICAPI NTSTATUS	GENERIC_EXPORT GenericAcquireRemoveLock(PGENERIC_REMOVE_LOCK lock, PVOID tag);

GENERICAPI VOID		GENERIC_EXPORT GenericReleaseRemoveLock(PGENERIC_REMOVE_LOCK lock, PVOID tag);

GENERICAPI VOID		GENERIC_EXPORT GenericReleaseRemoveLockAndWait(PGENERIC_REMOVE_LOCK lock, PVOID tag);



// NTDDK.H and WDM.H declares the documented support functions as macros which

// we need to redefine.



#if !defined(_NTDDK_)

	#error You must include WDM.H or NTDDK.H before GENERIC.H

#endif



#undef IoInitializeRemoveLock

#define IoInitializeRemoveLock GenericInitializeRemoveLock



#undef IoAcquireRemoveLock

#define IoAcquireRemoveLock GenericAcquireRemoveLock



#undef IoReleaseRemoveLock

#define IoReleaseRemoveLock GenericReleaseRemoveLock



#undef IoReleaseRemoveLockAndWait

#define IoReleaseRemoveLockAndWait GenericReleaseRemoveLockAndWait



// NTDDK.H/WDM.H declares an IO_REMOVE_LOCK structure.



#define _IO_REMOVE_LOCK _GENERIC_REMOVE_LOCK

#define IO_REMOVE_LOCK GENERIC_REMOVE_LOCK

#define PIO_REMOVE_LOCK PGENERIC_REMOVE_LOCK



///////////////////////////////////////////////////////////////////////////////



struct _GENERIC_EXTENSION;		// opaque

typedef struct _GENERIC_EXTENSION* PGENERIC_EXTENSION;



typedef NTSTATUS (__stdcall *PSTART_DEVICE)(PDEVICE_OBJECT, PCM_PARTIAL_RESOURCE_LIST raw, PCM_PARTIAL_RESOURCE_LIST translated);

typedef VOID (__stdcall *PSTOP_DEVICE)(PDEVICE_OBJECT, BOOLEAN);

typedef VOID (__stdcall *PREMOVE_DEVICE)(PDEVICE_OBJECT);

typedef BOOLEAN (__stdcall *PQUERYFUNCTION)(PDEVICE_OBJECT);

typedef BOOLEAN (__stdcall *PQUERYPOWERFUNCTION)(PDEVICE_OBJECT, DEVICE_POWER_STATE, DEVICE_POWER_STATE);

typedef VOID (__stdcall *PCONTEXTFUNCTION)(PDEVICE_OBJECT, DEVICE_POWER_STATE, DEVICE_POWER_STATE, PVOID);

typedef VOID (__stdcall *PFLUSHIOFUNCTION)(PDEVICE_OBJECT, UCHAR, UCHAR, DEVICE_POWER_STATE, DEVICE_POWER_STATE);

typedef DEVICE_POWER_STATE (__stdcall *PGETDSTATEFUNCTION)(PDEVICE_OBJECT, SYSTEM_POWER_STATE, DEVICE_POWER_STATE);



struct QSIO {PDEVQUEUE DeviceQueue; PDRIVER_STARTIO StartIo;};



typedef struct _GENERIC_INIT_STRUCT {

	ULONG Size;						// Size of this structure.

	PDEVICE_OBJECT DeviceObject;	// The device object being registered.

	PDEVICE_OBJECT Pdo;				// The PDO below this device object.

	PDEVICE_OBJECT Ldo;				// Immediately lower device object.

	PGENERIC_REMOVE_LOCK RemoveLock;// Address of remove lock in containing device extension (optional).

	PDEVQUEUE DeviceQueue;			// Address of queue object for read/write IRPs (optional).

	PDRIVER_STARTIO StartIo;		// Start I/O routine for reads & writes (required only if DeviceQueue non-NULL).

	PSTART_DEVICE StartDevice;		// Routine to initialize device configuration.

	PSTOP_DEVICE StopDevice;		// Routine to release device configuration.

	PREMOVE_DEVICE RemoveDevice;	// Routine to remove device object.

	UNICODE_STRING DebugName;		// Name to use in debug messages.

	ULONG Flags;					// Option flags.

	PQUERYFUNCTION OkayToStop;		// Routine to decide whether it's okay to stop device now (optional).

	PQUERYFUNCTION OkayToRemove;	// Routine to decide whether it's okay to remove device now (optional).

	PQUERYPOWERFUNCTION QueryPower;	// Routine to decide whether a proposed device power change is okay (optional).

	PCONTEXTFUNCTION SaveDeviceContext;	// Routine to save device context before power down (optional).

	PCONTEXTFUNCTION RestoreDeviceContext;	// Routine to restore device context after power up (optional).

	DEVICE_POWER_STATE PerfBoundary;		// (Optional) Power state below which context restore inordinately expensive.

	ULONG NumberOfQueues;					// Number of device queues in DeviceQueues array (1.3)

	PFLUSHIOFUNCTION FlushPendingIo;		// Encourage pending I/O to finish (optional) (2.0)

	PGETDSTATEFUNCTION GetDevicePowerState;	// Get D-state for given S-State (optional) (1.10)

	ULONG Reserved[6];						// Reserved for future use (1.3)

	struct QSIO Queues[1];					// (Optional) NumberOfQueues pointers to DEVQUEUE objects and their corresponding StartIo functions.

	} GENERIC_INIT_STRUCT, *PGENERIC_INIT_STRUCT;



#define GENERIC_AUTOLAUNCH			0x00000001	// register for AutoLaunch

#define GENERIC_USAGE_PAGING		0x00000002	// device supports DeviceUsageTypePaging

#define GENERIC_USAGE_DUMP			0x00000004	// device supports DeviceUsageTypeDumpFile

#define GENERIC_USAGE_HIBERNATE		0x00000008	// device supports DeviceUsageTypeHibernation

#define GENERIC_PENDING_IOCTLS		0x00000010	// driver may cache asynchronous IOCTLs

#define GENERIC_SURPRISE_REMOVAL_OK	0x00000020	// surprise removal of device is okay

#define GENERIC_IDLE_DETECT			0x00000040	// device supports generic idle detection scheme



#define GENERIC_CLIENT_FLAGS		0x0000007F	// mask to select client-controllable flags



// Enumeration for "wf" argument to GenericWakeupControl:



enum WAKEFUNCTION {

	EnableWakeup,					// enable system wakeup

	DisableWakeup,					// disable system wakeup

	ManageWaitWake,					// request or cancel WAIT_WAKE IRP, as appropriate

	CancelWaitWake,					// unconditionally cancel WAIT_WAKE

	TestWaitWake,					// test whether WAIT_WAKE enabled (ver 1.3)

	};



// Exported functions



GENERICAPI VOID		GENERIC_EXPORT CleanupGenericExtension(PGENERIC_EXTENSION pdx); // 1.3

GENERICAPI NTSTATUS	GENERIC_EXPORT GenericCacheControlRequest(PGENERIC_EXTENSION pdx, PIRP Irp, PIRP* pIrp);

GENERICAPI VOID		GENERIC_EXPORT GenericCleanupAllRequests(PGENERIC_EXTENSION pdx, PFILE_OBJECT fop, NTSTATUS status);

GENERICAPI VOID		GENERIC_EXPORT GenericCleanupControlRequests(PGENERIC_EXTENSION pdx, NTSTATUS status, PFILE_OBJECT fop);

GENERICAPI NTSTATUS GENERIC_EXPORT GenericDeregisterInterface(PGENERIC_EXTENSION pdx, const GUID* guid);

GENERICAPI NTSTATUS GENERIC_EXPORT GenericDispatchPnp(PGENERIC_EXTENSION, PIRP);

GENERICAPI NTSTATUS GENERIC_EXPORT GenericDispatchPower(PGENERIC_EXTENSION, PIRP);

GENERICAPI NTSTATUS GENERIC_EXPORT GenericEnableInterface(PGENERIC_EXTENSION pdx, const GUID* guid, BOOLEAN enable);

GENERICAPI PDEVICE_CAPABILITIES GENERIC_EXPORT GenericGetDeviceCapabilities(PGENERIC_EXTENSION pdx);

GENERICAPI PVOID	GENERIC_EXPORT GenericGetSystemAddressForMdl(PMDL mdl);

GENERICAPI ULONG	GENERIC_EXPORT GenericGetVersion(); // 1.3

GENERICAPI NTSTATUS	GENERIC_EXPORT GenericHandlePowerIoctl(PGENERIC_EXTENSION pdx, PIRP Irp);

GENERICAPI NTSTATUS	GENERIC_EXPORT GenericIdleDevice(PGENERIC_EXTENSION pdx, DEVICE_POWER_STATE state, BOOLEAN wait = FALSE);

GENERICAPI VOID		GENERIC_EXPORT GenericMarkDeviceBusy(PGENERIC_EXTENSION);

GENERICAPI VOID     GENERIC_EXPORT GenericRegisterForIdleDetection(PGENERIC_EXTENSION, ULONG ConservationTimeout, ULONG PerformanceTimeout, DEVICE_POWER_STATE State);

GENERICAPI NTSTATUS GENERIC_EXPORT GenericRegisterInterface(PGENERIC_EXTENSION pdx, const GUID* guid);

GENERICAPI VOID		GENERIC_EXPORT GenericSaveRestoreComplete(PVOID context);

GENERICAPI VOID		GENERIC_EXPORT GenericSetDeviceState(PGENERIC_EXTENSION pdx, PNP_DEVICE_STATE pnpstate);

GENERICAPI PIRP		GENERIC_EXPORT GenericUncacheControlRequest(PGENERIC_EXTENSION pdx, PIRP* pIrp);

GENERICAPI NTSTATUS GENERIC_EXPORT GenericWakeupControl(PGENERIC_EXTENSION pdx, enum WAKEFUNCTION wf);

GENERICAPI NTSTATUS GENERIC_EXPORT GenericWakeupFromIdle(PGENERIC_EXTENSION pdx, BOOLEAN wait = FALSE);

GENERICAPI ULONG    GENERIC_EXPORT GetSizeofGenericExtension(VOID);

GENERICAPI NTSTATUS GENERIC_EXPORT InitializeGenericExtension(PGENERIC_EXTENSION, PGENERIC_INIT_STRUCT);

GENERICAPI BOOLEAN	GENERIC_EXPORT IsWin98();



#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美视频三区在线播放| 亚洲精品一区二区三区影院| 91精品免费在线| 日韩一区日韩二区| 美女诱惑一区二区| 日本道精品一区二区三区| 欧美xxxx老人做受| 五月天亚洲精品| 色伊人久久综合中文字幕| 2欧美一区二区三区在线观看视频| 亚洲裸体在线观看| 成人中文字幕在线| 日韩三级中文字幕| 亚洲午夜私人影院| 91女人视频在线观看| 日本一区二区动态图| 麻豆国产精品官网| 777午夜精品视频在线播放| 亚洲欧美激情小说另类| 国产成a人无v码亚洲福利| 欧美一区二视频| 一区二区三区91| 91久久国产综合久久| 国产精品久久久久久久久快鸭| 韩国精品一区二区| 欧美电影免费观看高清完整版在 | 久久国产麻豆精品| 欧美亚洲国产一区在线观看网站| 国产欧美一区二区精品仙草咪| 久久精品国产一区二区三| 欧美日韩一级大片网址| 亚洲精品国久久99热| 91在线视频官网| 国产精品久久久久久久久免费桃花 | 毛片一区二区三区| 51精品秘密在线观看| 五月天精品一区二区三区| 在线成人免费视频| 日日夜夜精品视频天天综合网| 欧美另类高清zo欧美| 图片区日韩欧美亚洲| 欧美一区二区精美| 极品少妇xxxx精品少妇| 国产日韩v精品一区二区| 高清不卡一二三区| 综合久久综合久久| 在线视频欧美区| 免费观看成人鲁鲁鲁鲁鲁视频| 精品久久国产老人久久综合| 国产一区二区三区在线观看免费视频| 久久精品亚洲精品国产欧美kt∨| 国产精品夜夜嗨| 亚洲男同性视频| 在线观看91av| 成人综合婷婷国产精品久久| 亚洲欧洲av另类| 91精品国产综合久久福利 | 成人高清伦理免费影院在线观看| 国产精品免费网站在线观看| 91免费视频大全| 日韩国产高清在线| 欧美精品一区二区蜜臀亚洲| 国产suv精品一区二区6| 一区二区三区在线免费观看| 欧美一区二区三区男人的天堂| 国产精品一二三四区| 亚洲精品日日夜夜| 久久免费美女视频| 色嗨嗨av一区二区三区| 久久不见久久见免费视频7| 亚洲欧美综合色| 日韩午夜精品视频| 99久久婷婷国产| 久久精品二区亚洲w码| 1区2区3区国产精品| 日韩欧美一二三四区| 成人伦理片在线| 蜜桃视频一区二区三区在线观看 | 亚洲国产乱码最新视频 | 精品三级在线观看| 色综合欧美在线| 国模套图日韩精品一区二区 | 国产日韩影视精品| 9191国产精品| 91在线丨porny丨国产| 九九九精品视频| 亚洲成av人片www| **欧美大码日韩| 久久一夜天堂av一区二区三区| 91久久精品一区二区三| 国产成人午夜精品影院观看视频| 亚洲午夜一区二区| 亚洲免费在线视频一区 二区| 久久久夜色精品亚洲| 欧美在线观看一区| 99精品在线免费| 国产精品18久久久久| 欧美aaaaa成人免费观看视频| 亚洲资源中文字幕| 亚洲免费视频中文字幕| 欧美激情一区二区三区四区| 欧美大黄免费观看| 日韩一级视频免费观看在线| 欧美另类videos死尸| 色婷婷精品大在线视频| 成人午夜又粗又硬又大| 国产精品亚洲一区二区三区妖精 | 欧美成人女星排行榜| 91精品国产手机| 欧美一区二区视频网站| 制服丝袜亚洲色图| 欧美精品第1页| 欧美一二三四区在线| 91麻豆精品91久久久久同性| 欧美综合欧美视频| 精品视频在线视频| 欧美日韩美少妇| 欧美伦理视频网站| 欧美高清精品3d| 日韩欧美三级在线| 欧美精品一区二区三区一线天视频| 日韩一区二区免费在线电影 | 中文字幕在线免费不卡| 国产精品动漫网站| 一区二区免费看| 亚洲第一二三四区| 精品一区二区av| 国产91在线观看| 97久久精品人人爽人人爽蜜臀 | 成人久久视频在线观看| 成人免费看视频| 色网站国产精品| 5月丁香婷婷综合| 久久人人超碰精品| 日韩美女啊v在线免费观看| 亚洲一区二区精品3399| 免费看欧美美女黄的网站| 国产九九视频一区二区三区| 成人aaaa免费全部观看| 在线观看成人小视频| 日韩免费性生活视频播放| 欧美国产精品v| 香蕉影视欧美成人| 国产精品99久| 欧美日韩情趣电影| 久久女同互慰一区二区三区| 日韩毛片视频在线看| 亚洲成人动漫在线观看| 国产精品一区二区久久精品爱涩 | 欧美精品一区二区三区蜜臀| 中文字幕亚洲欧美在线不卡| 亚洲超碰97人人做人人爱| 麻豆精品视频在线观看视频| 成人高清免费观看| 91精品久久久久久蜜臀| 中文字幕一区二区三区不卡在线| 亚洲成av人片观看| av一区二区不卡| 日韩一区二区高清| 一区二区在线观看免费| 激情深爱一区二区| 欧美自拍丝袜亚洲| 国产欧美日韩不卡| 丝袜美腿亚洲一区| 91免费观看视频| 久久综合成人精品亚洲另类欧美 | 国产在线播放一区| 91久久精品日日躁夜夜躁欧美| 久久久国产精品麻豆| 丝袜诱惑亚洲看片| 色94色欧美sute亚洲线路一ni| 久久美女艺术照精彩视频福利播放| 亚洲成人中文在线| 不卡av电影在线播放| 欧美成人乱码一区二区三区| 亚洲午夜久久久久| 99热在这里有精品免费| 精品处破学生在线二十三| 亚洲成av人片在www色猫咪| 99免费精品视频| 国产精品免费aⅴ片在线观看| 久久综合综合久久综合| 欧美日韩久久一区| 亚洲精品视频一区二区| 天天做天天摸天天爽国产一区| 91麻豆视频网站| 亚洲日本va午夜在线电影| 成人精品在线视频观看| 久久青草国产手机看片福利盒子| 婷婷综合在线观看| 欧美性受极品xxxx喷水| 亚洲视频电影在线| 99精品视频一区二区三区| 国产日产精品1区| 国产成人av网站| 中文av字幕一区| k8久久久一区二区三区| 亚洲欧洲精品一区二区三区| www.一区二区| 亚洲欧美成人一区二区三区|