亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? bulkwmi.c

?? 支持USB2.0 BULK傳輸范例
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*++

Module Name:

    bulkwmi.c

Abstract:

Environment:

    Kernel mode

Notes:


--*/

#include "bulkusb.h"
#include "bulkpwr.h"
#include "bulkpnp.h"
#include "bulkdev.h"
#include "bulkrwr.h"
#include "bulkwmi.h"
#include "bulkusr.h"

#define MOFRESOURCENAME L"MofResourceName"

#define WMI_INTUSB_DRIVER_INFORMATION 0

DEFINE_GUID (INTUSB_WMI_STD_DATA_GUID, 
0xBBA21300, 0x6DD3, 0x11d2, 0xB8, 0x44, 0x00, 0xC0, 0x4F, 0xAD, 0x51, 0x71);

WMIGUIDREGINFO BulkUsbGuidList[1] = { {

        &INTUSB_WMI_STD_DATA_GUID, 1, 0 // driver information
    }
};

NTSTATUS
BulkUsb_WmiRegistration(
    IN OUT PDEVICE_EXTENSION DeviceExtension
    )
/*++

Routine Description:

    Registers with WMI as a data provider for this
    instance of the device

Arguments:

Return Value:

--*/
{
    NTSTATUS ntStatus;
    
    PAGED_CODE();

    DeviceExtension->WmiLibInfo.GuidCount = 
          sizeof (BulkUsbGuidList) / sizeof (WMIGUIDREGINFO);

    DeviceExtension->WmiLibInfo.GuidList           = BulkUsbGuidList;
    DeviceExtension->WmiLibInfo.QueryWmiRegInfo    = BulkUsb_QueryWmiRegInfo;
    DeviceExtension->WmiLibInfo.QueryWmiDataBlock  = BulkUsb_QueryWmiDataBlock;
    DeviceExtension->WmiLibInfo.SetWmiDataBlock    = BulkUsb_SetWmiDataBlock;
    DeviceExtension->WmiLibInfo.SetWmiDataItem     = BulkUsb_SetWmiDataItem;
    DeviceExtension->WmiLibInfo.ExecuteWmiMethod   = NULL;
    DeviceExtension->WmiLibInfo.WmiFunctionControl = NULL;

    //
    // Register with WMI
    //
    
    ntStatus = IoWMIRegistrationControl(DeviceExtension->FunctionalDeviceObject,
                                        WMIREG_ACTION_REGISTER);

    return ntStatus;
    
}

NTSTATUS
BulkUsb_WmiDeRegistration(
    IN OUT PDEVICE_EXTENSION DeviceExtension
    )
/*++

Routine Description:

     Inform WMI to remove this DeviceObject from its 
     list of providers. This function also 
     decrements the reference count of the deviceobject.

Arguments:

Return Value:

--*/
{

    PAGED_CODE();

    return IoWMIRegistrationControl(DeviceExtension->FunctionalDeviceObject,
                                    WMIREG_ACTION_DEREGISTER);

}

NTSTATUS
BulkUsb_DispatchSysCtrl(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP           Irp
    )
/*++
 
Routine Description:

Arguments:

Return Value:

--*/
{
    PDEVICE_EXTENSION       deviceExtension;
    SYSCTL_IRP_DISPOSITION  disposition;
    NTSTATUS                ntStatus;
    PIO_STACK_LOCATION      irpStack;
    
    PAGED_CODE();

    irpStack = IoGetCurrentIrpStackLocation (Irp);
    deviceExtension = (PDEVICE_EXTENSION) DeviceObject->DeviceExtension;

    KdPrint( (WMIMinorFunctionString(irpStack->MinorFunction)));

    if(Removed == deviceExtension->DeviceState) {

        ntStatus = STATUS_DELETE_PENDING;

        Irp->IoStatus.Status = ntStatus;
        Irp->IoStatus.Information = 0;

        IoCompleteRequest(Irp, IO_NO_INCREMENT);

        return ntStatus;
    }

    KdPrint( ("BulkUsb_DispatchSysCtrl::"));
    BulkUsb_IoIncrement(deviceExtension);

    ntStatus = WmiSystemControl(&deviceExtension->WmiLibInfo, 
                                DeviceObject, 
                                Irp,
                                &disposition);

    switch(disposition) {

        case IrpProcessed: 
        {
            //
            // This irp has been processed and may be completed or pending.
            //

            break;
        }
        
        case IrpNotCompleted:
        {
            //
            // This irp has not been completed, but has been fully processed.
            // we will complete it now
            //

            IoCompleteRequest(Irp, IO_NO_INCREMENT);                

            break;
        }
        
        case IrpForward:
        case IrpNotWmi:
        {
            //
            // This irp is either not a WMI irp or is a WMI irp targeted
            // at a device lower in the stack.
            //

            IoSkipCurrentIrpStackLocation (Irp);

            ntStatus = IoCallDriver(deviceExtension->TopOfStackDeviceObject, 
                                    Irp);

            break;
        }
                                    
        default:
        {
            //
            // We really should never get here, but if we do just forward....
            //

            ASSERT(FALSE);

            IoSkipCurrentIrpStackLocation (Irp);

            ntStatus = IoCallDriver(deviceExtension->TopOfStackDeviceObject, 
                                  Irp);
            break;
        }        
    }

    KdPrint( ("BulkUsb_DispatchSysCtrl::"));
    BulkUsb_IoDecrement(deviceExtension);

    return ntStatus;
}

NTSTATUS
BulkUsb_QueryWmiRegInfo(
    IN  PDEVICE_OBJECT  DeviceObject,
    OUT ULONG           *RegFlags,
    OUT PUNICODE_STRING InstanceName,
    OUT PUNICODE_STRING *RegistryPath,
    OUT PUNICODE_STRING MofResourceName,
    OUT PDEVICE_OBJECT  *Pdo	    
    )
/*++

Routine Description:

    This routine is a callback into the driver to retrieve the list of
    guids or data blocks that the driver wants to register with WMI. This
    routine may not pend or block. Driver should NOT call
    WmiCompleteRequest.

Arguments:

    DeviceObject is the device whose data block is being queried

    *RegFlags returns with a set of flags that describe the guids being
        registered for this device. If the device wants enable and disable
        collection callbacks before receiving queries for the registered
        guids then it should return the WMIREG_FLAG_EXPENSIVE flag. Also the
        returned flags may specify WMIREG_FLAG_INSTANCE_PDO in which case
        the instance name is determined from the PDO associated with the
        device object. Note that the PDO must have an associated devnode. If
        WMIREG_FLAG_INSTANCE_PDO is not set then Name must return a unique
        name for the device.

    InstanceName returns with the instance name for the guids if
        WMIREG_FLAG_INSTANCE_PDO is not set in the returned *RegFlags. The
        caller will call ExFreePool with the buffer returned.

    *RegistryPath returns with the registry path of the driver

    *MofResourceName returns with the name of the MOF resource attached to
        the binary file. If the driver does not have a mof resource attached
        then this can be returned as NULL.

    *Pdo returns with the device object for the PDO associated with this
        device if the WMIREG_FLAG_INSTANCE_PDO flag is returned in 
        *RegFlags.

Return Value:

    status

--*/
{
    PDEVICE_EXTENSION deviceExtension;

    PAGED_CODE();

    KdPrint( ("BulkUsb_QueryWmiRegInfo - begins\n"));

    deviceExtension = DeviceObject->DeviceExtension;

    *RegFlags     = WMIREG_FLAG_INSTANCE_PDO;
    *RegistryPath = &Globals.BulkUsb_RegistryPath;
    *Pdo          = deviceExtension->PhysicalDeviceObject;
    RtlInitUnicodeString(MofResourceName, MOFRESOURCENAME);

    KdPrint( ("BulkUsb_QueryWmiRegInfo - ends\n"));
    
    return STATUS_SUCCESS;
}

NTSTATUS
BulkUsb_QueryWmiDataBlock(
    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
    )
/*++

Routine Description:

    This routine is a callback into the driver to query for the contents of
    a data block. When the driver has finished filling the data block it
    must call WmiCompleteRequest to complete the irp. The driver can
    return STATUS_PENDING if the irp cannot be completed immediately.

Arguments:

    DeviceObject is the device whose data block is being queried

    Irp is the Irp that makes this request

    GuidIndex is the index into the list of guids provided when the
        device registered

    InstanceIndex is the index that denotes which instance of the data block
        is being queried.
            
    InstanceCount is the number of instances expected to be returned for
        the data block.
            
    InstanceLengthArray is a pointer to an array of ULONG that returns the 
        lengths of each instance of the data block. If this is NULL then
        there was not enough space in the output buffer to fulfill the request

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品vⅰdeose4hd| 成人欧美一区二区三区黑人麻豆| 性久久久久久久| 欧美亚洲综合在线| 亚洲视频小说图片| 欧洲av一区二区嗯嗯嗯啊| 亚洲二区在线观看| 日韩欧美高清一区| 国产成人综合自拍| 亚洲精品视频在线| 欧美一卡二卡三卡| 成人综合在线视频| 亚洲成人动漫在线观看| 精品欧美一区二区三区精品久久 | 国产三区在线成人av| 99视频在线观看一区三区| 一区二区三区av电影| 欧美一二区视频| 成人av在线播放网站| 亚洲一区二区三区不卡国产欧美| 欧美精品日韩一本| 成人免费电影视频| 亚洲成人精品一区| 国产丝袜美腿一区二区三区| 在线视频中文字幕一区二区| 麻豆国产一区二区| 中文字幕在线观看不卡| 91精品福利在线一区二区三区| 国产精品99久久久久久宅男| 亚洲精品国产一区二区精华液| 精品久久久影院| 在线精品视频一区二区| 国产又黄又大久久| 午夜精品久久久久久久久| 久久久av毛片精品| 欧美日韩一区二区三区四区五区| 久久69国产一区二区蜜臀 | 亚洲卡通动漫在线| 日韩视频永久免费| 色婷婷精品久久二区二区蜜臀av| 麻豆精品精品国产自在97香蕉| 亚洲男同性恋视频| 久久精品一区二区三区不卡牛牛| 欧美视频一二三区| 99久久精品免费观看| 国产一区二区在线电影| 亚洲超碰精品一区二区| 综合电影一区二区三区 | 午夜精品免费在线| 久久久久国产精品人| 色94色欧美sute亚洲13| 国产精品国产自产拍高清av王其| 免费人成网站在线观看欧美高清| 国产精品久久久一区麻豆最新章节| 亚洲777理论| 国产精品欧美综合在线| 日韩欧美国产高清| 欧美日韩一区二区三区免费看 | 欧美日韩综合不卡| av激情成人网| 国产91精品露脸国语对白| 国产资源在线一区| 久久不见久久见免费视频7| 视频一区在线播放| 天天综合日日夜夜精品| 亚洲午夜免费电影| 一区二区三区视频在线观看| 亚洲三级小视频| 亚洲美女淫视频| 亚洲色图制服诱惑 | 成人永久aaa| 国产成人精品三级| 成人在线视频一区| 国产成人av在线影院| 夫妻av一区二区| 成人激情动漫在线观看| 成人小视频在线观看| 成人性生交大片免费| aa级大片欧美| 日本大香伊一区二区三区| 欧美中文字幕一二三区视频| 欧美日韩国产一区二区三区地区| 欧美视频第二页| 欧美军同video69gay| 日韩免费电影一区| 久久这里都是精品| 国产精品欧美一区二区三区| 成人ar影院免费观看视频| 波波电影院一区二区三区| 色综合中文字幕国产| 91在线精品一区二区三区| 色噜噜狠狠色综合欧洲selulu| 国产精品亚洲成人| 婷婷丁香久久五月婷婷| 亚洲欧美日韩国产综合在线| 国产精品网站一区| 国产三级一区二区| 久久久欧美精品sm网站| 日韩欧美一区二区三区在线| 欧美日韩久久久一区| 91精品国产一区二区三区| 欧美视频第二页| 日韩免费看网站| 久久综合视频网| 国产无一区二区| 亚洲色图欧洲色图婷婷| 一区二区三区免费在线观看| 午夜视频在线观看一区二区三区| 久久精品国产99久久6| 激情欧美一区二区| 欧美三级一区二区| 欧美日韩一区二区三区在线看| 99久久久免费精品国产一区二区| 国产美女主播视频一区| 日韩国产高清在线| 国模一区二区三区白浆| 97久久超碰精品国产| 久久久不卡网国产精品二区| k8久久久一区二区三区| 六月丁香婷婷色狠狠久久| 激情小说欧美图片| 91一区二区三区在线观看| 日韩精品一区二区在线观看| 国产精品卡一卡二| 另类中文字幕网| 欧洲av一区二区嗯嗯嗯啊| 久久久99精品免费观看| 日韩**一区毛片| 91麻豆成人久久精品二区三区| 日韩女优制服丝袜电影| 亚洲乱码国产乱码精品精98午夜| 捆绑紧缚一区二区三区视频| 91在线精品一区二区三区| 亚洲精品一区二区三区影院| 亚洲一区欧美一区| 91免费精品国自产拍在线不卡| 久久免费美女视频| 欧美在线999| 久久综合给合久久狠狠狠97色69| 亚洲午夜免费电影| 97久久超碰国产精品| 久久久精品天堂| 麻豆精品视频在线观看免费| 欧美在线一区二区三区| 中文字幕一区二区三区不卡在线| 九九九久久久精品| 日韩一区二区三区精品视频 | 色综合久久天天| 久久久午夜精品| 久久99精品一区二区三区 | 色婷婷综合久久久中文一区二区| 久久久久久久久久久久久久久99| 热久久久久久久| 欧美区一区二区三区| 亚洲国产欧美一区二区三区丁香婷| 99久久精品国产毛片| 国产精品毛片高清在线完整版| 国产精品一品视频| 337p日本欧洲亚洲大胆精品| 久久精品噜噜噜成人88aⅴ| 欧美日本乱大交xxxxx| 亚洲成人动漫在线免费观看| 欧美日韩一级二级| 亚洲午夜精品一区二区三区他趣| 色94色欧美sute亚洲线路一久| 一区二区三区日韩精品视频| 色诱亚洲精品久久久久久| 亚洲婷婷综合色高清在线| 91女厕偷拍女厕偷拍高清| 亚洲柠檬福利资源导航| 91美女视频网站| 亚洲影院免费观看| 91精品黄色片免费大全| 美女视频黄a大片欧美| 精品国精品国产| 成人国产亚洲欧美成人综合网 | 国产裸体歌舞团一区二区| 国产日韩欧美一区二区三区乱码 | 激情小说亚洲一区| 久久久精品影视| 91小视频免费看| 日韩精品一区第一页| 日韩精品一二三区| 日韩欧美中文一区| 国产一区二区在线免费观看| 国产精品美女久久久久久2018| 91麻豆视频网站| 强制捆绑调教一区二区| 欧美mv日韩mv亚洲| 成人午夜精品一区二区三区| 怡红院av一区二区三区| 91麻豆精品国产| 国产99久久久精品| 亚洲精品国久久99热| 日韩一级完整毛片| www.亚洲色图.com| 天堂av在线一区| 亚洲国产成人在线| 欧美老女人在线| 粉嫩av亚洲一区二区图片|