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

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

?? generic.h

?? 一本在講述USB驅動程式的書 及其范例原碼
?? 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一区二区三区免费野_久草精品视频
免费在线一区观看| 欧美体内she精高潮| 中文字幕一区二区不卡| 欧美性感一类影片在线播放| 久久精品99国产精品日本| 国产日产欧产精品推荐色| 欧美特级限制片免费在线观看| 日本不卡123| 夜夜嗨av一区二区三区中文字幕 | 欧美日韩一区在线| 国产高清一区日本| 午夜久久久久久久久久一区二区| 日韩欧美精品在线| 欧美日韩精品高清| 成人综合日日夜夜| 伦理电影国产精品| 丝袜脚交一区二区| 亚洲免费大片在线观看| 亚洲精品一区二区三区精华液 | 美女视频免费一区| 亚洲三级在线免费| 久久久久久免费| 欧美va在线播放| 欧美日韩中文字幕精品| 99re这里只有精品首页| 成人h精品动漫一区二区三区| 秋霞影院一区二区| 亚洲综合一区二区三区| 亚洲欧美日本韩国| 欧美国产综合一区二区| 欧美mv和日韩mv的网站| 日韩一级免费一区| 欧美丰满一区二区免费视频| 97se亚洲国产综合自在线| 波多野结衣视频一区| 狠狠色狠狠色综合| 蜜臀久久久99精品久久久久久| 亚洲天堂av老司机| 欧美国产精品劲爆| 久久精品亚洲精品国产欧美kt∨| 欧美巨大另类极品videosbest | 欧美mv日韩mv| 日韩一区和二区| 欧美日韩国产免费| 欧美精品久久久久久久多人混战| 日本精品视频一区二区| av激情综合网| 欧美在线观看一二区| 在线亚洲一区二区| 91一区在线观看| 欧美亚洲一区二区在线观看| 日本电影亚洲天堂一区| 色哟哟日韩精品| 欧美日韩一级二级三级| 这里只有精品99re| 777奇米四色成人影色区| 欧美一级久久久| 国产精品久久久爽爽爽麻豆色哟哟| 精品国产123| 中文字幕第一页久久| 亚洲国产精品精华液ab| 国产精品久久久久久妇女6080| 亚洲精品你懂的| 亚洲一区二区三区三| 亚洲福利一二三区| 免费人成在线不卡| 激情六月婷婷久久| 国产精品99久久久久久宅男| 国产成人综合自拍| 91欧美一区二区| 欧美一区二区在线视频| 欧美精品一区视频| 精品国产电影一区二区| 国产精品不卡视频| 亚洲日本免费电影| 亚洲一区免费视频| 国产又粗又猛又爽又黄91精品| 国产乱码精品一区二区三区五月婷| 九九精品一区二区| 91免费观看视频在线| 欧美日韩一本到| 国产91精品在线观看| 欧美视频第二页| 日韩午夜av电影| 久久久久久久综合狠狠综合| 中文字幕在线不卡| 五月天一区二区三区| 国产在线一区二区综合免费视频| 成人av在线一区二区| 一本色道久久综合精品竹菊| 欧美精品第1页| 亚洲欧洲日产国产综合网| 亚洲最快最全在线视频| 精品一区二区三区视频| 欧洲国内综合视频| 亚洲精品一区二区三区福利 | 欧美一区二区三区免费视频| 中文字幕一区二区三区乱码在线| 亚洲电影欧美电影有声小说| 激情久久五月天| 欧美伦理影视网| 国产精品区一区二区三| 亚洲国产精品久久人人爱蜜臀| 国产成人午夜高潮毛片| 欧美剧在线免费观看网站| 国产精品三级电影| 久久精品国产精品亚洲红杏| 91看片淫黄大片一级在线观看| 国产日韩欧美精品一区| 石原莉奈在线亚洲二区| 99久久精品情趣| 欧美精品一区在线观看| 日本不卡一区二区| 97精品久久久久中文字幕| 欧美xxx久久| 激情五月婷婷综合网| 91精品国产高清一区二区三区| 日韩av中文字幕一区二区三区| 青青草国产成人av片免费| 91在线小视频| 26uuu欧美| 精品一区二区精品| 欧美电影一区二区| 婷婷夜色潮精品综合在线| 不卡的av电影在线观看| 欧美精品一区二区三区久久久| 日韩电影在线免费看| 色欧美片视频在线观看| 国产精品女同互慰在线看| 国产精品亚洲午夜一区二区三区 | 欧美老肥妇做.爰bbww视频| 国产精品不卡视频| 国产成人亚洲综合a∨猫咪| 久久久久久久免费视频了| 蜜桃av一区二区在线观看| 欧美日韩精品综合在线| 三级在线观看一区二区| 欧美性色黄大片| 一区二区三区四区蜜桃| 色婷婷久久久亚洲一区二区三区| av色综合久久天堂av综合| 日韩精品欧美成人高清一区二区| 欧美性生活大片视频| 亚洲免费视频中文字幕| 99精品欧美一区二区三区小说| 日韩一二在线观看| 日韩av电影免费观看高清完整版 | 国产精品色在线观看| 国产成人av网站| 久久网站热最新地址| 国产91露脸合集magnet| 亚洲美女屁股眼交| eeuss国产一区二区三区| 亚洲欧美怡红院| 97精品久久久午夜一区二区三区| 亚洲欧洲日韩综合一区二区| 99热精品一区二区| 中文文精品字幕一区二区| 99久久婷婷国产综合精品电影| 国产欧美一区二区精品性色 | 国产精品911| 亚洲视频一二三区| 91精彩视频在线| 亚洲不卡一区二区三区| 26uuu成人网一区二区三区| 国产一区二区三区高清播放| 久久只精品国产| 日本道色综合久久| 午夜精品123| 日韩一区二区三区四区| 成人精品国产福利| 一区二区三区影院| 日韩欧美国产综合在线一区二区三区| 极品少妇xxxx偷拍精品少妇| 久久九九久久九九| 欧美无砖砖区免费| 精品一区中文字幕| 亚洲欧美一区二区在线观看| 欧美久久久一区| 国产一区二区三区国产| 中文字幕综合网| 欧美一级理论性理论a| 国产成人免费在线| 国产精品久久99| 欧美电视剧在线看免费| 国产精品18久久久久久久久久久久| 亚洲精品日韩专区silk | 亚洲欧美日韩国产一区二区三区| 欧美一区二区高清| 色香蕉成人二区免费| 国产在线精品一区二区| 亚洲一区二区三区美女| 中文字幕欧美日本乱码一线二线| 欧美日本一区二区三区四区| 99久久综合99久久综合网站| 狠狠色2019综合网| 日韩有码一区二区三区| 一区二区三区免费观看| 国产人成一区二区三区影院| 宅男噜噜噜66一区二区66|