0x801,\
METHOD_BUFFERED,\
FILE_ANY_ACCESS)
#define IOCTL_WDM1_REMOVE_BUFFER CTL_CODE(\
FILE_DEVICE_UNKNOWN,\
0x802,\
METHOD_BUFFERED,\
FILE_ANY_ACCESS)
#define IOCTL_WDM1_GET_BUFFER_SIZE CTL_CODE(\
FILE_DEVICE_UNKNOWN,\
0x803, \
METHOD_BUFFERED,\
FILE_ANY_ACCESS)
#define IOCTL_WDM1_GET_BUFFER CTL_CODE(\
FILE_DEVICE_UNKNOWN,\
0x804,\
METHOD_BUFFERED,\
FILE_ANY_ACCESS)
#define IOCTL_WDM1_UNRECOGNISED CTL_CODE(\
FILE_DEVICE_UNKNOWN,\
0x805,\
METHOD_BUFFERED,\
FILE_ANY_ACCESS)
Listing 4.13 GUIDs.h
///////////////////////////////////////////////////////////////////////
//Wdm1 device interface GUID
// {C0CF0640-5F6E-11d2-B677-00C0DFE4C1F3}
DEFINE_GUID(WDM1_GUID, 0xc0cf0640, 0x5f6e, 0x11d2, 0xb6, 0x77, 0x0, 0xc0, 0xdf, 0xe4, 0xc1, 0xf3);
///////////////////////////////////////////////////////////////////////
//Wdm2 device interface GUID
// {C0CF0641-5F6E-11d2-B677-00C0DFE4C1F3}
DEFINE_GUID(WDM2_GUID, 0xc0cf0641, 0x5f6e, 0x11d2, 0xb6, 0x77, 0x0, 0xc0, 0xdf, 0xe4, 0xd, 0xf3);
///////////////////////////////////////////////////////////////////////
//Wdm3 device interface GUID
// {C0CF0642-5F6E-11d2-B677-00C0DFE4C1F3}
DEFINE_GUID(WDM3_GUID, 0xc0cf0642, 0x5f6e, 0x11d2, 0xb6, 0x77, 0x0, 0xc0, 0xdf, 0xe4, 0xd, 0xf3);
///////////////////////////////////////////////////////////////////////
//Wdm3 WMI data block GUID
// {C0CF0643-5F6E-11d2-B677-00C0DFE4C1F3}
DEFINE_GUID(WDM3_WMI_GUID, 0xc0cf0643, 0x5f6e, 0x11d2, 0xb6, 0x77, 0x0, 0xc0, 0xdf, 0xe4, 0xc1, 0xf3);
///////////////////////////////////////////////////////////////////////
//Wdm3 WMI event block GUID
// {C0CF0644-5F6E-11d2-B677-00C0DFE4C1F3}
DEFINE_GUID(WDM3_WMI_EVENT_GUID, 0xc0cf0644, 0x5f6e, 0x11d2, 0xb6, 0x77, 0x0, 0, 0xdf, 0xe4, 0xc1, 0xf3);
/*
// {C0CF0645-5F6E-11d2-B677-00C0DFE4C1F3}
DEFINE_GUID(<>,
0xc0cf0645, 0x5f6e, 0x11d2, 0xb6, 0x77, 0x0, 0xc0, 0xdf, 0xe4, 0xc1, 0xf3);
// {C0CF0646-5F6E-11d2-B677-00C0DFE4C1F31
DEFINE_GUID(<>,
0xc0cf0646, 0x5f6e, 0x11d2, 0xb6, 0x77, 0x0, 0xc0, 0xdf, 0xe4, 0xc1, 0xf3);
// {C0CF0647-5F6E-11d2-B677-00C0DFE4C1F3}
DEFINE GUID(<>,
0xc0cf0647, 0x5f6e, 0x11d2, 0xb6, 0x77, 0x0, 0xc0, 0xdf, 0xe4, 0xc1, 0xf3);
// {C0CF0648-5F6E-11d2-B677-00C0DFE4C1F3}
DEFINE_GUID(<>,
0xc0cf0648, 0x5f6e, 0x11d2, 0xb6, 0x77, 0x0, 0xc0, 0xdf, 0xe4, 0xc1, 0xf3);
*/
///////////////////////////////////////////////////////////////////////
Listing 4.14 resource.h
//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Used by Wdm1.rc
//
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NO_MFC 1
#define _APS_NEXT_RESOURCE_VALUE 101
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1000
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif
Listing 4.15 Wdm1free.inf
; Wdm1free.Inf – install information file
; Copyright © 1998,1999 Chris Cant, PHD Computer Consultants Ltd
[Version]
Signature="$Chicago$"
Class=Unknown
Provider=%WDMBook%
DriverVer=04/26/1999,1.0.5.0
[Manufacturer]
%WDMRook% = WDM.Book
[WDM.Book]
%Wdm1%=Wdm1.Install, *wdmBook\Wdm1
[DestinationDirs]
Wdm1.Files.Driver=10,System32\Drivers
Wdm1.Files.Driver.NTx86=10,System32\Drivers
[SourceDisksNames]
1="Wdm1 build directory",,,
[SourceDisksFiles]
Wdm1.sys=1,obj\i386\free
[SourceDisksFiles.x86] Wdm1.sys=1,objfre\i386
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Windows 98
[Wdm1.Install]
CopyFiles=Wdm1.Files.Driver
AddReg=Wdm1.AddReg
[Wdm1.AddReg]
HKR,,DevLoader,,*ntkern
HKR,,NTMPDriver,,Wdm1.sys
[Wdm1.Files.Driver]
Wdm1.sys
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Windows 2000
[Wdm1.Install.NTx86]
CopyFiles=Wdm1.Files.Driver.NTx86
[Wdm1.Files.Driver.NTx86]
Wdm1.sys,,,%COPYFLG_NOSKIP%
[Wdm1.Install.NTx86.Services]
AddService = Wdm1, %SPSVCINST_ASSOCSERVICE%, Wdm1.Service
[Wdm1.Service]
DisplayName = %Wdm1.ServiceName%
ServiceType = %SERVICE_KERNEL_DRIVER%
StartType = %SERVICE_DEMAND_START%
ErrorControl = %SERVICE_ERROR_NORMAL%
ServiceBinary = %10%\System32\Drivers\Wdm1.sys
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Strings
[Strings]
WDMBook="WDM Book"
Wdm1="WDM Book: Wdm1 Example, free build"
Wdm1.ServiceName="WDM Book Wdm1 Driver"
SPSVCINST_ASSOCSERVICE=0x00000002; Driver service is associated with device being installed
COPYFLG_NOSKIP=2; Do not allow user to skip file
SERVICE_KERNEL_DRIVER=1
SERVICE_AUTO_START=2
SERVICE_DEMAND_START=3
SERVICE_ERROR_NORMAL=1
Listing 4.16 SOURCES
TARGETNAME=Wdm1
TARGETTYPE=DRIVER
DRIVERTYPE=WDM
TARGETPATH=OBJ
INCLUDES=$(BASEDIR)\inc;
SOURCES=init.cpp \
dispatch.cpp \
pnp.cpp \
DebugPrint.c \
Wdm1.rc
NTTARGETFILES=PostBuildSteps
Listing 4.17 makefile.inc
PostBuildSteps: $(TARGET)
!if "$(DDKBUILDENV)"="free"
rebase –B 0x10000 –X . $(TARGET)
!endif
copy $(TARGET) $(WINDIR)\system32\drivers
Listing 4.18 makefile
#
# DO NOT EDIT THIS FILE!!! Edit .\sources. if you want to add a new. source
# file to this component. This file merely indirects to the real make file
# that is shared by all the driver components of the Windows NT DDK
#
!INCLUDE $(NTMAKEENV)\makefile.def
Читать дальше