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

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

?? driverentry.cpp

?? 使用USB端口進行gps編程
?? CPP
字號:
// Main program for usbgps driver
// Copyright (C) 1999 by Walter Oney
// All rights reserved

#include "stddcls.h"
#include "driver.h"
#include <initguid.h>
#include "guids.h"

NTSTATUS AddDevice(IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT pdo);
VOID DriverUnload(IN PDRIVER_OBJECT fdo);
NTSTATUS OnRequestComplete(IN PDEVICE_OBJECT fdo, IN PIRP Irp, IN PKEVENT pev);

BOOLEAN IsWin98();
BOOLEAN win98 = FALSE;

UNICODE_STRING servkey;

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

#pragma INITCODE

extern "C" NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,
	IN PUNICODE_STRING RegistryPath)
	{							// DriverEntry

	// Insist that OS support at least the WDM level of the DDK we use

	if (!IoIsWdmVersionAvailable(1, 0))
		{
		KdPrint((DRIVERNAME " - Expected version of WDM (%d.%2.2d) not available\n", 1, 0));
		return STATUS_UNSUCCESSFUL;
		}

	// See if we're running under Win98 or NT:

	win98 = IsWin98();


	// Save the name of the service key

	servkey.Buffer = (PWSTR) ExAllocatePool(PagedPool, RegistryPath->Length + sizeof(WCHAR));
	if (!servkey.Buffer)
		{
		KdPrint((DRIVERNAME " - Unable to allocate %d bytes for copy of service key name\n", RegistryPath->Length + sizeof(WCHAR)));
		return STATUS_INSUFFICIENT_RESOURCES;
		}
	servkey.MaximumLength = RegistryPath->Length + sizeof(WCHAR);
	RtlCopyUnicodeString(&servkey, RegistryPath);

	// Initialize function pointers

	DriverObject->DriverUnload = DriverUnload;
	DriverObject->DriverExtension->AddDevice = AddDevice;

	DriverObject->MajorFunction[IRP_MJ_CREATE] = DispatchCreate;
	DriverObject->MajorFunction[IRP_MJ_CLOSE] = DispatchClose;
	DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = DispatchControl;
	DriverObject->MajorFunction[IRP_MJ_POWER] = DispatchPower;
	DriverObject->MajorFunction[IRP_MJ_PNP] = DispatchPnp;
	
	return STATUS_SUCCESS;
	}							// DriverEntry

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

#pragma PAGEDCODE

VOID DriverUnload(IN PDRIVER_OBJECT DriverObject)
	{							// DriverUnload
	PAGED_CODE();
	RtlFreeUnicodeString(&servkey);
	}							// DriverUnload

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

NTSTATUS AddDevice(IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT pdo)
	{							// AddDevice
	PAGED_CODE();

	NTSTATUS status;

	// Create a functional device object to represent the hardware we're managing.

	PDEVICE_OBJECT fdo;
	#define xsize sizeof(DEVICE_EXTENSION)
	status = IoCreateDevice(DriverObject, xsize, NULL,
		FILE_DEVICE_UNKNOWN, FILE_DEVICE_SECURE_OPEN, FALSE, &fdo);
	if (!NT_SUCCESS(status))
		{						// can't create device object
		KdPrint((DRIVERNAME " - IoCreateDevice failed - %X\n", status));
		return status;
		}						// can't create device object
	
	PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION) fdo->DeviceExtension;

	// From this point forward, any error will have side effects that need to
	// be cleaned up. Using a try-finally block allows us to modify the program
	// easily without losing track of the side effects.

	__try
		{						// finish initialization
		pdx->DeviceObject = fdo;
		pdx->Pdo = pdo;
		IoInitializeRemoveLock(&pdx->RemoveLock, 0, 0, 0);
		pdx->state = STOPPED;		// device starts in the stopped state

		// Link our device object into the stack leading to the PDO
		
		pdx->LowerDeviceObject = IoAttachDeviceToDeviceStack(fdo, pdo);
		if (!pdx->LowerDeviceObject)
			{						// can't attach device
			KdPrint((DRIVERNAME " - IoAttachDeviceToDeviceStack failed\n"));
			status = STATUS_DEVICE_REMOVED;
			__leave;
			}						// can't attach device

		// Set power management flags in the device object

		fdo->Flags |= DO_POWER_PAGABLE;

		// Register a device interface

		status = IoRegisterDeviceInterface(pdo, &GUID_INTERFACE_USBGPS, NULL, &pdx->ifname);
		if (!NT_SUCCESS(status))
			{						// unable to register interface
			KdPrint((DRIVERNAME " - IoRegisterDeviceInterface failed - %8.8lX\n", status));
			__leave;
			}						// unable to register interface

		// Indicate that our initial power state is D0 (fully on). Also indicate that
		// we have a pagable power handler (otherwise, we'll never get idle shutdown
		// messages!)

		pdx->syspower = PowerSystemWorking;
		pdx->devpower = PowerDeviceD0;
		POWER_STATE state;
		state.DeviceState = PowerDeviceD0;
		PoSetPowerState(fdo, DevicePowerState, state);

		// Clear the "initializing" flag so that we can get IRPs

		fdo->Flags &= ~DO_DEVICE_INITIALIZING;
		}						// finish initialization
	__finally
		{						// cleanup side effects
		if (!NT_SUCCESS(status))
			{					// need to cleanup
			if (pdx->ifname.Buffer)
				RtlFreeUnicodeString(&pdx->ifname);
			if (pdx->LowerDeviceObject)
				IoDetachDevice(pdx->LowerDeviceObject);
			IoDeleteDevice(fdo);
			}					// need to cleanup
		}						// cleanup side effects

	return status;
	}							// AddDevice

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

#pragma LOCKEDCODE

NTSTATUS CompleteRequest(IN PIRP Irp, IN NTSTATUS status, IN ULONG_PTR info)
	{							// CompleteRequest
	Irp->IoStatus.Status = status;
	Irp->IoStatus.Information = info;
	IoCompleteRequest(Irp, IO_NO_INCREMENT);
	return status;
	}							// CompleteRequest

NTSTATUS CompleteRequest(IN PIRP Irp, IN NTSTATUS status)
	{							// CompleteRequest
	Irp->IoStatus.Status = status;
	IoCompleteRequest(Irp, IO_NO_INCREMENT);
	return status;
	}							// CompleteRequest

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

#pragma PAGEDCODE

NTSTATUS ForwardAndWait(IN PDEVICE_OBJECT fdo, IN PIRP Irp)
	{							// ForwardAndWait
	ASSERT(KeGetCurrentIrql() == PASSIVE_LEVEL);
	PAGED_CODE();
	
	KEVENT event;
	KeInitializeEvent(&event, NotificationEvent, FALSE);

	IoCopyCurrentIrpStackLocationToNext(Irp);
	IoSetCompletionRoutine(Irp, (PIO_COMPLETION_ROUTINE) OnRequestComplete,
		(PVOID) &event, TRUE, TRUE, TRUE);

	PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION) fdo->DeviceExtension;
	IoCallDriver(pdx->LowerDeviceObject, Irp);
	KeWaitForSingleObject(&event, Executive, KernelMode, FALSE, NULL);
	return Irp->IoStatus.Status;
	}							// ForwardAndWait

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

#pragma LOCKEDCODE

NTSTATUS OnRequestComplete(IN PDEVICE_OBJECT fdo, IN PIRP Irp, IN PKEVENT pev)
	{							// OnRequestComplete
	KeSetEvent(pev, 0, FALSE);
	return STATUS_MORE_PROCESSING_REQUIRED;
	}							// OnRequestComplete

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

VOID EnableAllInterfaces(PDEVICE_EXTENSION pdx, BOOLEAN enable)
	{							// EnableAllInterfaces
	IoSetDeviceInterfaceState(&pdx->ifname, enable);
	}							// EnableAllInterfaces

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

VOID DeregisterAllInterfaces(PDEVICE_EXTENSION pdx)
	{							// DeregisterAllInterfaces
	IoSetDeviceInterfaceState(&pdx->ifname, FALSE);
	RtlFreeUnicodeString(&pdx->ifname);
	}							// DeregisterAllInterfaces

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

#pragma PAGEDCODE

VOID RemoveDevice(IN PDEVICE_OBJECT fdo)
	{							// RemoveDevice
	PAGED_CODE();
	PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION) fdo->DeviceExtension;
	NTSTATUS status;


	if (pdx->LowerDeviceObject)
		IoDetachDevice(pdx->LowerDeviceObject);

	IoDeleteDevice(fdo);
	}							// RemoveDevice

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

#pragma INITCODE

BOOLEAN IsWin98()
	{							// IsWin98
#ifdef _X86_

	// Windows 98 (including 2d ed) supports WDM version 1.0, whereas Win2K
	// supports 1.10.

	return !IoIsWdmVersionAvailable(1, 0x10);
#else // not _X86_
	return FALSE;
#endif // not _X86_
	}							// IsWin98

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

#if DBG && defined(_X86_)
#pragma LOCKEDCODE

extern "C" void __declspec(naked) __cdecl _chkesp()
	{
	_asm je okay
	ASSERT(!DRIVERNAME " - Stack pointer mismatch!");
okay:
	_asm ret
	}

#endif // DBG

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产手机| 麻豆91精品视频| 日韩精品免费专区| 国产一区高清在线| 成人高清视频免费观看| 欧美三级视频在线| 久久亚洲一级片| 一区二区三区在线免费| 精品亚洲成av人在线观看| 91伊人久久大香线蕉| 欧美一级在线观看| 国产精品免费视频一区| 日韩激情在线观看| 成人天堂资源www在线| 91麻豆精品91久久久久同性| 国产免费成人在线视频| 视频在线在亚洲| 成人a免费在线看| 日韩一卡二卡三卡四卡| 成人欧美一区二区三区在线播放| 日av在线不卡| 91福利视频网站| 欧美国产欧美综合| 日本大胆欧美人术艺术动态| 色婷婷香蕉在线一区二区| 久久综合九色综合97婷婷| 亚洲亚洲精品在线观看| 国产成人福利片| 欧美日韩午夜精品| 国产欧美1区2区3区| 丝袜亚洲另类欧美| 精品美女在线播放| 亚洲在线视频免费观看| 懂色av中文一区二区三区| 日韩一区二区三| 亚洲美女在线国产| 成人禁用看黄a在线| 欧美电影免费观看高清完整版在| 一区二区三区四区蜜桃| 粉嫩欧美一区二区三区高清影视| 日韩免费一区二区| 午夜在线成人av| 在线亚洲人成电影网站色www| 国产欧美日韩在线| 久久91精品久久久久久秒播| 欧美日韩国产免费一区二区 | 免费久久99精品国产| 在线视频你懂得一区| 日韩美女视频一区二区| 国产高清久久久久| 精品999在线播放| 久久精品国产秦先生| 欧美一级日韩不卡播放免费| 亚洲国产综合色| 色视频欧美一区二区三区| 国产亚洲欧美色| 国内精品国产三级国产a久久| 日韩视频在线观看一区二区| 日韩中文字幕91| 欧美日韩大陆在线| 午夜精品久久久久久久蜜桃app| 91久久精品日日躁夜夜躁欧美| 国产精品乱码一区二区三区软件| 国产精品91xxx| 久久久另类综合| 国产精品亚洲专一区二区三区| 日韩免费视频一区| 韩日欧美一区二区三区| 精品国产123| 国内精品免费**视频| 26uuu国产日韩综合| 国产一区二区在线影院| 2023国产精品视频| 国产精品1区二区.| 欧美激情自拍偷拍| 成人av网站在线观看免费| 国产精品嫩草99a| 99久久久久免费精品国产 | 91猫先生在线| 一区二区久久久久久| 欧美三区在线观看| 偷拍一区二区三区| 日韩精品一区二区三区蜜臀 | 国产精品久久久久永久免费观看 | 亚洲免费av在线| 欧美午夜片在线观看| 秋霞成人午夜伦在线观看| 欧美高清hd18日本| 青青草国产精品97视觉盛宴| 精品久久久网站| 国产成人亚洲综合a∨婷婷图片| 国产精品日韩成人| 一本色道综合亚洲| 日韩精品成人一区二区三区| 日韩欧美高清在线| 国产激情视频一区二区三区欧美 | 欧美日韩中文字幕精品| 日韩中文字幕亚洲一区二区va在线 | 久久国产精品99精品国产| 久久久亚洲午夜电影| 91麻豆国产福利精品| 亚洲高清视频在线| 久久蜜桃一区二区| 99久久综合99久久综合网站| 午夜影院久久久| 久久久99精品免费观看| 色综合欧美在线视频区| 青青青伊人色综合久久| 欧美激情一区二区三区| 欧美婷婷六月丁香综合色| 91小宝寻花一区二区三区| 国产精品久久久久9999吃药| 99riav一区二区三区| 午夜久久电影网| 久久久99免费| 在线观看亚洲精品| 国产一区二区伦理| 亚洲黄色片在线观看| 精品久久国产字幕高潮| 91首页免费视频| 美女尤物国产一区| 亚洲欧美另类久久久精品| 欧美一区二区三区的| 成人av动漫网站| 免费的成人av| 一区二区三区久久久| 欧美精品一区二区三区久久久| 一本色道久久综合亚洲精品按摩| 奇米影视7777精品一区二区| 亚洲欧洲性图库| 欧美成人一区二区| 色94色欧美sute亚洲线路一ni| 久久精品免费观看| 亚洲一区二区中文在线| 国产欧美在线观看一区| 欧美电影一区二区三区| 成人性视频免费网站| 麻豆成人综合网| 亚洲综合色噜噜狠狠| 欧美激情一区二区在线| 久久久www免费人成精品| 欧美在线影院一区二区| 国产精品一级片| 美女性感视频久久| 一区二区日韩电影| 国产精品日日摸夜夜摸av| 日韩精品一区二区三区视频| 精品视频一区二区不卡| 成人av网在线| 国产成人综合精品三级| 老汉av免费一区二区三区| 亚洲高清在线精品| 亚洲乱码国产乱码精品精小说| 久久久美女毛片| 日韩欧美区一区二| 欧美久久一二三四区| 欧美性xxxxx极品少妇| 99久久婷婷国产综合精品电影| 国产一区二区91| 久久草av在线| 美女脱光内衣内裤视频久久影院| 亚洲制服丝袜在线| 亚洲黄网站在线观看| 亚洲人午夜精品天堂一二香蕉| 欧美国产日韩a欧美在线观看| 2021中文字幕一区亚洲| 制服丝袜av成人在线看| 欧美日韩综合色| 欧美三级三级三级| 欧美在线free| 在线观看亚洲精品| 欧美系列一区二区| 欧美三级日韩在线| 欧美日韩一区三区| 欧美日韩一区二区三区四区| 在线日韩一区二区| 欧美性猛片xxxx免费看久爱| 在线免费观看成人短视频| 在线中文字幕一区二区| 欧美主播一区二区三区| 欧美最新大片在线看| 在线免费观看成人短视频| 欧洲精品一区二区| 欧美美女一区二区三区| 欧美日韩黄色一区二区| 欧美性生活大片视频| 欧美体内she精视频| 欧美日韩国产bt| 欧美一级日韩不卡播放免费| 精品三级av在线| 久久精品亚洲精品国产欧美| 日本一区免费视频| 国产精品乱人伦中文| 亚洲男帅同性gay1069| 亚洲精品日韩一| 亚洲成人中文在线| 久久精品国产一区二区| 国产一区二区中文字幕| caoporn国产精品| 在线看国产一区|