📄 driverpart2.cpp
字号:
//**************************************************************************************************//
//* *//
//* Copyright (C) 2003, James Antognini, antognini@mindspring.com. *//
//* *//
//**************************************************************************************************//
#define JADriverVersion "1.15"
#ifdef __cplusplus // C++ conversion
extern "C"
{
#endif
#include <ntddk.h>
#define JADriverKernelMode 1 // Ensure kernel pieces available.
#include "DemoDriver.h"
#ifdef __cplusplus // C++ conversion
}
#endif
//**************************************************************************************************//
//* *//
//* This is called for DeviceIoControl. *//
//* *//
//**************************************************************************************************//
NTSTATUS
DemoDrvDispatch2(
IN PDEVICE_OBJECT pDevObj,
IN PIRP pIrp
)
{
NTSTATUS status = STATUS_SUCCESS;
PIO_STACK_LOCATION pIrpStack;
PVOID pInBuffer,
pOutBuffer,
ptr;
ULONG lenInBuffer,
lenOutBuffer,
IoControlCode,
lclRc;
pDemoDrvExtension pDevExt = // Address of device object extension.
(pDemoDrvExtension)pDevObj->DeviceExtension;
pDemoDrvExtension pDevExt2 = pMstrDevExt; // Address of device object extension.
DbgPrint(("%s DemoDrvDispatch2: Entered.\n", pMstrDevExt->DriverName.Buffer));
// Set the request up as successful.
pIrp->IoStatus.Status = STATUS_SUCCESS;
pIrp->IoStatus.Information = 0;
// Get a pointer to the current location in the Irp. This is where the function codes and
// parameters are located.
pIrpStack = IoGetCurrentIrpStackLocation(pIrp);
// Get the pointer to the input/output buffer and its length
pInBuffer = pIrp->AssociatedIrp.SystemBuffer;
lenInBuffer = pIrpStack->Parameters.DeviceIoControl.InputBufferLength;
pOutBuffer = pIrp->AssociatedIrp.SystemBuffer;
lenOutBuffer = pIrpStack->Parameters.DeviceIoControl.OutputBufferLength;
IoControlCode = pIrpStack->Parameters.DeviceIoControl.IoControlCode;
switch(pIrpStack->MajorFunction)
{
case IRP_MJ_DEVICE_CONTROL: // DeviceIoControl.
switch(IoControlCode)
{
case DemoDrv_TEST:
lclRc = DemoDrvTechnique(
pDevObj,
pIrp,
pInBuffer,
lenInBuffer,
pOutBuffer,
lenOutBuffer
);
break;
default:
break;
;
} // End switch(IoControlCode)
break;
default:
;
} // End switch(pIrpStack->MajorFunction).
IoCompleteRequest(pIrp, IO_NO_INCREMENT);
return status;
} // End DemoDrvDispatch2().
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -