⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 driverpart2.cpp

📁 撰写windows驱动须知(Essentials Of Building Windows Drivers)
💻 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 + -