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

📄 firefly.h

📁 winddk src目录下的WDM源码压缩!
💻 H
字号:
/*++

Copyright (c) Microsoft Corporation.  All rights reserved.

    THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
    KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
    IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
    PURPOSE.


Module Name:

    firefly.h

Abstract:

    This header contains Device driver that controls the Firefly device.

Environment:

    Kernel mode

Revision History:

    Adrian J. Oney - Written March 17th, 2001
                     (based on Toaster DDK filter sample)

--*/

#if !defined(_FIREFLY_H_)
#define _FIREFLY_H_

#include <ntddk.h>
#include <initguid.h>
#include <wdmguid.h>
#include <wmistr.h>
#include <wmilib.h>
#include "firefly.h"
#include "magic.h"
#include <dontuse.h>

//
// This is the WMI guid for our functionality.
//
//{ab27db29-db25-42e6-a3e7-28bd46bdb666}
DEFINE_GUID(                                                                  \
    FIREFLY_WMI_STD_DATA_GUID,                                                \
    0xAB27DB29, 0xDB25, 0x42E6, 0xA3, 0xE7, 0x28, 0xBD, 0x46, 0xBD, 0xB6, 0x66\
    );


#define DRIVERNAME "firefly.sys: "

#define POOL_TAG   'fFtS'

#if DBG
#define DebugPrint(_x_) \
               DbgPrint(DRIVERNAME); \
               DbgPrint _x_; 
#else
#define DebugPrint(_x_) 
#endif

#define ARRAYLEN(array) (sizeof(array)/sizeof(array[0]))

//
// These are the states Filter transition to upon receiving a specific PnP Irp.
// Refer to the PnP Device States diagram in DDK documentation for better
// understanding.
//
typedef enum {

    NotStarted = 0,         // Not started yet
    Started,                // Device has received the START_DEVICE IRP
    StopPending,            // Device has received the QUERY_STOP IRP
    Stopped,                // Device has received the STOP_DEVICE IRP
    RemovePending,          // Device has received the QUERY_REMOVE IRP
    SurpriseRemovePending,  // Device has received the SURPRISE_REMOVE IRP
    Deleted                 // Device has received the REMOVE_DEVICE IRP

} DEVICE_PNP_STATE;

#define INITIALIZE_PNP_STATE(_Data_)    \
        (_Data_)->DevicePnPState =  NotStarted;\
        (_Data_)->PreviousPnPState = NotStarted;

#define SET_NEW_PNP_STATE(_Data_, _state_) \
        (_Data_)->PreviousPnPState =  (_Data_)->DevicePnPState;\
        (_Data_)->DevicePnPState = (_state_);

#define RESTORE_PREVIOUS_PNP_STATE(_Data_)   \
        (_Data_)->DevicePnPState =   (_Data_)->PreviousPnPState;\


typedef struct {

    //
    // TRUE if the tail light is on, FALSE otherwise.
    //
    BOOLEAN TailLit;

} FIREFLY_WMI_STD_DATA, *PFIREFLY_WMI_STD_DATA;

typedef struct {

    //
    // A back pointer to the device object.
    //
    PDEVICE_OBJECT Self;

    //
    // The top of the stack before this filter was added.
    //
    PDEVICE_OBJECT NextLowerDriver;

    //
    // Bottom of the stack.
    //
    PDEVICE_OBJECT PhysicalDeviceObject;

    //
    // Current PnP state of the device
    //
    DEVICE_PNP_STATE DevicePnPState;

    //
    // Previous PnP state of the device
    //
    DEVICE_PNP_STATE PreviousPnPState;

    //
    // WMI Information.
    //
    WMILIB_CONTEXT WmiLibInfo;

    //
    // Removelock to track IRPs so that device can be removed and 
    // the driver can be unloaded safely.
    //
    IO_REMOVE_LOCK RemoveLock; 

    //
    // Our firefly filter data.
    //
    FIREFLY_WMI_STD_DATA StdDeviceData;

} DEVICE_EXTENSION, *PDEVICE_EXTENSION;

NTSTATUS
DriverEntry(
    IN PDRIVER_OBJECT   DriverObject,
    IN PUNICODE_STRING  RegistryPath
    );

NTSTATUS
FireflyAddDevice(
    IN PDRIVER_OBJECT   DriverObject,
    IN PDEVICE_OBJECT   PhysicalDeviceObject
    );

VOID
FireflyUnload(
    IN PDRIVER_OBJECT   DriverObject
    );

NTSTATUS
FireflyDispatchPnp(
    IN PDEVICE_OBJECT   DeviceObject,
    IN PIRP             Irp
    );

NTSTATUS
FireflySynchronousCompletionRoutine(
    IN PDEVICE_OBJECT   DeviceObject,
    IN PIRP             Irp,
    IN PVOID            Context
    );

NTSTATUS
FireflyDispatchPower(
    IN PDEVICE_OBJECT   DeviceObject,
    IN PIRP             Irp
    );

NTSTATUS
FireflyDispatchWmi(
    IN PDEVICE_OBJECT    DeviceObject,
    IN PIRP              Irp
    );

NTSTATUS
FireflyForwardIrp(
    IN PDEVICE_OBJECT   DeviceObject,
    IN PIRP             Irp
    );

NTSTATUS
FireflyRegisterWmi(
    IN  PDEVICE_EXTENSION   DeviceExtension
    );

NTSTATUS
FireflySetWmiDataItem(
    IN PDEVICE_OBJECT   DeviceObject,
    IN PIRP             Irp,
    IN ULONG            GuidIndex,
    IN ULONG            InstanceIndex,
    IN ULONG            DataItemId,
    IN ULONG            BufferSize,
    IN PUCHAR           Buffer
    );

NTSTATUS
FireflySetWmiDataBlock(
    IN PDEVICE_OBJECT   DeviceObject,
    IN PIRP             Irp,
    IN ULONG            GuidIndex,
    IN ULONG            InstanceIndex,
    IN ULONG            BufferSize,
    IN PUCHAR           Buffer
    );

NTSTATUS
FireflyQueryWmiDataBlock(
    IN      PDEVICE_OBJECT  DeviceObject,
    IN      PIRP            Irp,
    IN      ULONG           GuidIndex,
    IN      ULONG           InstanceIndex,
    IN      ULONG           InstanceCount,
    IN OUT  PULONG          InstanceLengthArray,
    IN      ULONG           OutBufferSize,
    OUT     PUCHAR          Buffer
    );

NTSTATUS
FireflyQueryWmiRegInfo(
    IN  PDEVICE_OBJECT      DeviceObject,
    OUT ULONG              *RegFlags,
    OUT PUNICODE_STRING     InstanceName,
    OUT PUNICODE_STRING    *RegistryPath,
    OUT PUNICODE_STRING     MofResourceName,
    OUT PDEVICE_OBJECT     *Pdo
    );

PCHAR
PnPMinorFunctionString(
    IN UCHAR            MinorFunction
    );

NTSTATUS
FireflySendIoctl(
    IN  PDEVICE_OBJECT  DeviceObject,
    IN  ULONG           ControlCode,
    IN  PVOID           InputBuffer,
    IN  ULONG           InputBufferLength,
    OUT PVOID           OutputBuffer,
    IN  ULONG           OutputBufferLength,
    IN  PFILE_OBJECT    FileObject
    );

NTSTATUS
FireflySetFeature(
    IN  PDEVICE_OBJECT  PhysicalDeviceObject,
    IN  UCHAR           PageId,
    IN  USHORT          FeatureId,
    IN  BOOLEAN         EnableFeature
    );

NTSTATUS
FireflyOpenStack(
    IN  PDEVICE_OBJECT   DeviceObject,
    OUT PFILE_OBJECT    *FileObject
    );

#endif // _FIREFLY_H_


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -