// =================================================================
NTSTATUS DriverInitialize (PDRIVER_OBJECT pDriverObject,
PUNICODE_STRING pusRegistryPath)
{
PDEVICE_OBJECT pDeviceObject = NULL;
NTSTATUS ns = STATUS_DEVICE_CONFIGURATION_ERROR;
if ((ns = IoCreateDevice (pDriverObject, DEVICE_CONTEXT_,
&usDeviceName, FILE_DEVICE_CUSTOM,
0, FALSE, &pDeviceObject))
== STATUS_SUCCESS)
{
if ((ns = IoCreateSymbolicLink (&usSymbolicLinkName,
&usDeviceName))
== STATUS_SUCCESS)
{
gpDeviceObject = pDeviceObject;
gpDeviceContext = pDeviceObject->DeviceExtension;
gpDeviceContext->pDriverObject = pDriverObject;
gpDeviceContext->pDeviceObject = pDeviceObject;
}
else
{
IoDeleteDevice (pDeviceObject);
}
}
return ns;
}
// -----------------------------------------------------------------
NTSTATUS DriverEntry (PDRIVER_OBJECT pDriverObject,
PUNICODE_STRING pusRegistryPath)
{
PDRIVER_DISPATCH *ppdd;
NTSTATUS ns = STATUS_DEVICE_CONFIGURATION_ERROR;
if ((ns = DriverInitialize (pDriverObject, pusRegistryPath))
== STATUS_SUCCESS)
{
ppdd = pDriverObject->MajorFunction;
ppdd [IRP_MJ_CREATE ] =
ppdd [IRP_MJ_CREATE_NAMED_PIPE ] =
ppdd [IRP_MJ_CLOSE ] =
ppdd [IRP_MJ_READ ] =
ppdd [IRP_MJ_WRITE ] =
ppdd [IRP_MJ_QUERY_INFORMATION ] =
ppdd [IRP_MJ_SET_INFORMATION ] =
ppdd [IRP_MJ_QUERY_EA ] =
ppdd [IRP_MJ_SET_EA ] =
ppdd [IRP_MJ_FLUSH_BUFFERS ] =
ppdd [IRP_MJ_QUERY_VOLUME_INFORMATION] =
ppdd [IRP_MJ_SET_VOLUME_INFORMATION ] =
ppdd [IRP_MJ_DIRECTORY_CONTROL ] =
ppdd [IRP_MJ_FILE_SYSTEM_CONTROL ] =
ppdd [IRP_MJ_DEVICE_CONTROL ] =
ppdd [IRP_MJ_INTERNAL_DEVICE_CONTROL ] =
ppdd [IRP_MJ_SHUTDOWN ] =
ppdd [IRP_MJ_LOCK_CONTROL ] =
ppdd [IRP_MJ_CLEANUP ] =
ppdd [IRP_MJ_CREATE_MAILSLOT ] =
ppdd [IRP_MJ_QUERY_SECURITY ] =
ppdd [IRP_MJ_SET_SECURITY ] =
ppdd [IRP_MJ_POWER ] =
ppdd [IRP_MJ_SYSTEM_CONTROL ] =
ppdd [IRP_MJ_DEVICE_CHANGE ] =
ppdd [IRP_MJ_QUERY_QUOTA ] =
ppdd [IRP_MJ_SET_QUOTA ] =
ppdd [IRP_MJ_PNP ] = DriverDispatcher;
pDriverObject->DriverUnload = DriverUnload;
}
return ns;
}
// =================================================================
// END OF PROGRAM
// =================================================================
列表 3-3. 驱动程序骨架的源代码
// TestDrv.h
// 08-07-2000
// Copyright @2005
// =================================================================
// PROGRAM IDENTIFICATION
// =================================================================
#define DRV_BUILD 1
#define DRV_VERSION_HIGH 1
#define DRV_VERSION_LOW 0
// -----------------------------------------------------------------
#define DRV_DAY 07
#define DRV_MONTH 02
#define DRV_YEAR 2005
// -----------------------------------------------------------------
// Customize these settings by editing the configuration file
// D:etc32w2k_wiz.ini
#define DRV_MODULE TestDrv
#define DRV_NAME
#define DRV_COMPANY
#define DRV_AUTHOR
#define DRV_EMAIL
#define DRV_PREFIX
// =================================================================
// HEADER FILES
// =================================================================
#include "drvinfo.h" // defines more DRV_* items
////////////////////////////////////////////////////////////////////
#ifndef _RC_PASS_
////////////////////////////////////////////////////////////////////
// =================================================================
// CONSTANTS
推荐阅读
- Windows 2000 下 RDS 配置详解
- 7 《Undocumented Windows 2000 Secrets》翻译 --- 第四章
- 怀旧服暗月马戏团时间
- 如何在Windows2000中动态禁用/启用Ctrl-Alt-Delete
- 部分未公开的Windows 2000核心功能调用
- Windows 2000服务器配置攻略
- 关掉Windows 2000不必要的服务
- Windows 2000的“隐形”武器
- Windows 2000 快速查找文件
- 获得Windows 2000的帮助信息
