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

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

?? bulkpnp.c

?? TUSB3410 win9x和win xp 驅動源代碼,包含開發測試工具
?? C
?? 第 1 頁 / 共 3 頁
字號:
Routine Description:

    Called from BulkUsb_ProcessPnPIrp(), the dispatch routine for IRP_MJ_PNP.
    Initializes a given instance of the device on the USB.
    USB client drivers such as us set up URBs (USB Request Packets) to send requests
    to the host controller driver (HCD). The URB structure defines a format for all
    possible commands that can be sent to a USB device.
    Here, we request the device descriptor and store it, and configure the device.


Arguments:

    DeviceObject - pointer to the FDO (Functional Device Object)

Return Value:

    NT status code

--*/
{
    PDEVICE_EXTENSION deviceExtension;
    NTSTATUS ntStatus;
    PUSB_DEVICE_DESCRIPTOR deviceDescriptor = NULL;
    PURB urb;
    ULONG siz;

    BULKUSB_KdPrint( DBGLVL_DEFAULT,("enter BulkUsb_StartDevice\n"));

    deviceExtension = DeviceObject->DeviceExtension;

    urb = BULKUSB_ExAllocatePool(NonPagedPool,
                         sizeof(struct _URB_CONTROL_DESCRIPTOR_REQUEST));

    BULKUSB_KdPrintCond( DBGLVL_HIGH,!urb, ("BulkUsb_StartDevice() FAILED BULKUSB_ExAllocatePool() for URB\n"));

    if (urb) {

        siz = sizeof(USB_DEVICE_DESCRIPTOR);

        deviceDescriptor = BULKUSB_ExAllocatePool(NonPagedPool,
                                          siz);

        BULKUSB_KdPrintCond( DBGLVL_HIGH, !deviceDescriptor, ("BulkUsb_StartDevice() FAILED BULKUSB_ExAllocatePool() for deviceDescriptor\n"));

        if (deviceDescriptor) {

            UsbBuildGetDescriptorRequest(urb,
                                         (USHORT) sizeof (struct _URB_CONTROL_DESCRIPTOR_REQUEST),
                                         USB_DEVICE_DESCRIPTOR_TYPE,
                                         0,
                                         0,
                                         deviceDescriptor,
                                         NULL,
                                         siz,
                                         NULL);


            ntStatus = BulkUsb_CallUSBD(DeviceObject, urb);

            BULKUSB_KdPrintCond( DBGLVL_DEFAULT, !NT_SUCCESS(ntStatus), ("BulkUsb_StartDevice() FAILED BulkUsb_CallUSBD(DeviceObject, urb)\n"));

            if (NT_SUCCESS(ntStatus)) {
                BULKUSB_KdPrint( DBGLVL_MEDIUM,("Device Descriptor = %x, len %x\n",
                                deviceDescriptor,
                                urb->UrbControlDescriptorRequest.TransferBufferLength));

                BULKUSB_KdPrint( DBGLVL_MEDIUM,("I82930 Device Descriptor:\n"));
                BULKUSB_KdPrint( DBGLVL_MEDIUM,("-------------------------\n"));
                BULKUSB_KdPrint( DBGLVL_MEDIUM,("bLength %d\n", deviceDescriptor->bLength));
                BULKUSB_KdPrint( DBGLVL_MEDIUM,("bDescriptorType 0x%x\n", deviceDescriptor->bDescriptorType));
                BULKUSB_KdPrint( DBGLVL_MEDIUM,("bcdUSB 0x%x\n", deviceDescriptor->bcdUSB));
                BULKUSB_KdPrint( DBGLVL_MEDIUM,("bDeviceClass 0x%x\n", deviceDescriptor->bDeviceClass));
                BULKUSB_KdPrint( DBGLVL_MEDIUM,("bDeviceSubClass 0x%x\n", deviceDescriptor->bDeviceSubClass));
                BULKUSB_KdPrint( DBGLVL_MEDIUM,("bDeviceProtocol 0x%x\n", deviceDescriptor->bDeviceProtocol));
                BULKUSB_KdPrint( DBGLVL_MEDIUM,("bMaxPacketSize0 0x%x\n", deviceDescriptor->bMaxPacketSize0));
                BULKUSB_KdPrint( DBGLVL_MEDIUM,("idVendor 0x%x\n", deviceDescriptor->idVendor));
                BULKUSB_KdPrint( DBGLVL_MEDIUM,("idProduct 0x%x\n", deviceDescriptor->idProduct));
                BULKUSB_KdPrint( DBGLVL_MEDIUM,("bcdDevice 0x%x\n", deviceDescriptor->bcdDevice));
                BULKUSB_KdPrint( DBGLVL_MEDIUM,("iManufacturer 0x%x\n", deviceDescriptor->iManufacturer));
                BULKUSB_KdPrint( DBGLVL_MEDIUM,("iProduct 0x%x\n", deviceDescriptor->iProduct));
                BULKUSB_KdPrint( DBGLVL_MEDIUM,("iSerialNumber 0x%x\n", deviceDescriptor->iSerialNumber));
                BULKUSB_KdPrint( DBGLVL_MEDIUM,("bNumConfigurations 0x%x\n", deviceDescriptor->bNumConfigurations));
            }
        } else {
			// if we got here we failed to allocate deviceDescriptor
            ntStatus = STATUS_INSUFFICIENT_RESOURCES;
        }

        if (NT_SUCCESS(ntStatus)) {
            deviceExtension->UsbDeviceDescriptor = deviceDescriptor;
        } else if (deviceDescriptor) {
            BULKUSB_ExFreePool(deviceDescriptor);
        }

        BULKUSB_ExFreePool(urb);

    } else {
		// if we got here we failed to allocate the urb
        ntStatus = STATUS_INSUFFICIENT_RESOURCES;
    }

    if (NT_SUCCESS(ntStatus)) {
        ntStatus = BulkUsb_ConfigureDevice(DeviceObject);

        BULKUSB_KdPrintCond( DBGLVL_MEDIUM,!NT_SUCCESS(ntStatus),("BulkUsb_StartDevice BulkUsb_ConfigureDevice() FAILURE (%x)\n", ntStatus));
    }


    if (NT_SUCCESS(ntStatus)) {
        deviceExtension->DeviceStarted = TRUE;
    }
    BULKUSB_KdPrint( DBGLVL_DEFAULT, ("exit BulkUsb_StartDevice (%x)\n", ntStatus));

    return ntStatus;
}


NTSTATUS
BulkUsb_RemoveDevice(
    IN  PDEVICE_OBJECT DeviceObject
    )
/*++

Routine Description:

	Called from BulkUsb_ProcessPnPIrp() to
    clean up our device instance's allocated buffers; free symbolic links

Arguments:

    DeviceObject - pointer to the FDO

Return Value:

    NT status code from free symbolic link operation

--*/
{
    PDEVICE_EXTENSION deviceExtension;
    NTSTATUS ntStatus = STATUS_SUCCESS;
    UNICODE_STRING deviceLinkUnicodeString;

    BULKUSB_KdPrint( DBGLVL_DEFAULT,("enter BulkUsb_RemoveDevice\n"));

    deviceExtension = DeviceObject->DeviceExtension;

    RtlInitUnicodeString (&deviceLinkUnicodeString,
                          deviceExtension->DeviceLinkNameBuffer);

    // remove the GUID-based symbolic link
    ntStatus = IoSetDeviceInterfaceState(&deviceLinkUnicodeString, FALSE);
    BULKUSB_ASSERT( NT_SUCCESS( ntStatus ) );

    //
    // Free device descriptor structure
    //

    if (deviceExtension->UsbDeviceDescriptor) {
        BULKUSB_ExFreePool(deviceExtension->UsbDeviceDescriptor);
    }

    //
    // Free up the UsbInterface structure
    //
    if (deviceExtension->UsbInterface) {
        BULKUSB_ExFreePool(deviceExtension->UsbInterface);
    }

	// free up the USB config discriptor
    if (deviceExtension->UsbConfigurationDescriptor) {
        BULKUSB_ExFreePool(deviceExtension->UsbConfigurationDescriptor);
    }


    // free the pending irp list
    if ( deviceExtension->PendingIoIrps ) {
             BULKUSB_ExFreePool(deviceExtension->PendingIoIrps );

    }

	BULKUSB_ASSERT( gExAllocCount == 0 );
    BULKUSB_KdPrint( DBGLVL_HIGH,("exit BulkUsb_RemoveDevice() gExAllocCount = dec %d\n", gExAllocCount ));

    BULKUSB_KdPrint( DBGLVL_DEFAULT,("exit BulkUsb_RemoveDevice() status = 0x%x\n", ntStatus ));

    return ntStatus;
}




NTSTATUS
BulkUsb_StopDevice(
    IN  PDEVICE_OBJECT DeviceObject
    )
/*++

Routine Description:

    Stops a given instance of a 82930 device on the USB.
    We basically just tell USB this device is now 'unconfigured'

Arguments:

    DeviceObject - pointer to the device object for this instance of a 82930

Return Value:

    NT status code

--*/
{
    PDEVICE_EXTENSION deviceExtension;
    NTSTATUS ntStatus = STATUS_SUCCESS;
    PURB urb;
    ULONG siz;

    BULKUSB_KdPrint( DBGLVL_DEFAULT,("enter BulkUsb_StopDevice\n"));

    deviceExtension = DeviceObject->DeviceExtension;

    //
    // Send the select configuration urb with a NULL pointer for the configuration
    // handle. This closes the configuration and puts the device in the 'unconfigured'
    // state.
    //

    siz = sizeof(struct _URB_SELECT_CONFIGURATION);

    urb = BULKUSB_ExAllocatePool(NonPagedPool,
                         siz);

    if (urb) {
        UsbBuildSelectConfigurationRequest(urb,
                                          (USHORT) siz,
                                          NULL);

        ntStatus = BulkUsb_CallUSBD(DeviceObject, urb);

        BULKUSB_KdPrintCond( DBGLVL_DEFAULT,!NT_SUCCESS(ntStatus),("BulkUsb_StopDevice() FAILURE Configuration Closed status = %x usb status = %x.\n", ntStatus, urb->UrbHeader.Status));

        BULKUSB_ExFreePool(urb);
    } else {
        ntStatus = STATUS_INSUFFICIENT_RESOURCES;
    }


    if (NT_SUCCESS(ntStatus)) {
        deviceExtension->DeviceStarted = FALSE;
    }

    deviceExtension->StopDeviceRequested = FALSE;

    BULKUSB_KdPrint( DBGLVL_DEFAULT,("exit BulkUsb_StopDevice() (%x)\n", ntStatus));

    return ntStatus;
}



NTSTATUS
BulkUsb_IrpCompletionRoutine(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp,
    IN PVOID Context
    )
/*++

Routine Description:

    Used as a  general purpose completion routine so it can signal an event,
    passed as the Context, when the next lower driver is done with the input Irp.
	This routine is used by both PnP and Power Management logic.

    Even though this routine does nothing but set an event, it must be defined and
    prototyped as a completetion routine for use as such


Arguments:

    DeviceObject - Pointer to the device object for the class device.

    Irp - Irp completed.

    Context - Driver defined context, in this case a pointer to an event.

Return Value:

    The function value is the final status from the operation.

--*/
{
    PKEVENT event = Context;

    // Set the input event
    KeSetEvent(event,
               1,       // Priority increment  for waiting thread.
               FALSE);  // Flag this call is not immediately followed by wait.

    // This routine must return STATUS_MORE_PROCESSING_REQUIRED because we have not yet called
    // IoFreeIrp() on this IRP.
    return STATUS_MORE_PROCESSING_REQUIRED;

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99精品偷自拍| 在线这里只有精品| 色一情一乱一乱一91av| 正在播放一区二区| 中文字幕一区二区三中文字幕| 日韩激情在线观看| 在线观看欧美黄色| 久久久精品黄色| 日韩国产欧美在线观看| 成av人片一区二区| 日韩欧美国产1| 日本欧美一区二区| 欧美午夜精品一区二区蜜桃 | 精品久久久久久久人人人人传媒| 亚洲精品视频观看| 国产69精品久久久久777| 欧美成人伊人久久综合网| 亚洲成人av一区| 欧美日韩免费一区二区三区视频| 综合色中文字幕| www.av亚洲| 一区二区三区在线观看欧美 | 成人高清视频在线| 成人免费在线观看入口| 成人在线综合网| 精品国产区一区| 精品一区二区久久久| 日韩免费福利电影在线观看| 日本美女一区二区三区| 欧美日韩日日骚| 伦理电影国产精品| 精品国产一区二区三区av性色| 老司机免费视频一区二区| 日韩无一区二区| 成人在线视频一区| 一区二区中文视频| 欧美色精品天天在线观看视频| 午夜天堂影视香蕉久久| 3atv在线一区二区三区| 久久99精品视频| 国产精品久久影院| 在线观看国产日韩| 蜜臀91精品一区二区三区| 久久久久久9999| 欧美日韩专区在线| 韩国毛片一区二区三区| 一区二区在线免费观看| 91精品欧美综合在线观看最新 | 亚洲自拍偷拍综合| 精品国产髙清在线看国产毛片| 国产精品1024久久| 亚洲视频在线一区二区| 欧美日韩成人在线一区| 国内精品免费**视频| 一区二区三区在线影院| 精品裸体舞一区二区三区| 97久久超碰国产精品电影| 天天影视涩香欲综合网| 欧美精品一区二区三区蜜臀| 国产一区二区三区在线观看免费视频 | 91在线免费播放| 丝袜诱惑制服诱惑色一区在线观看 | 不卡的av中国片| 日本欧洲一区二区| 亚洲国产精品影院| 中文字幕在线一区二区三区| 欧美草草影院在线视频| 欧美人与z0zoxxxx视频| 99久精品国产| 不卡一区二区三区四区| 国产激情一区二区三区桃花岛亚洲| 亚洲妇女屁股眼交7| 国产精品成人一区二区艾草 | 国产一区二区美女| 男男gaygay亚洲| 日韩电影在线观看电影| 一区二区三区美女| 《视频一区视频二区| 国产午夜亚洲精品不卡| 日韩精品最新网址| 欧美无砖砖区免费| 欧美日韩在线播放三区四区| 一本到不卡精品视频在线观看| 岛国精品在线播放| 成人免费看黄yyy456| 丁香婷婷综合五月| 91色在线porny| 欧美在线观看视频在线| 精品1区2区3区| 日韩丝袜情趣美女图片| 久久综合久久综合久久综合| 亚洲精品一区二区三区蜜桃下载| 久久综合狠狠综合久久综合88| 久久综合九色综合97婷婷女人| 精品国产电影一区二区| 国产亚洲综合色| 综合在线观看色| 亚洲曰韩产成在线| 日韩va欧美va亚洲va久久| 蜜桃一区二区三区在线观看| 国内精品免费在线观看| 国产乱一区二区| 97久久超碰精品国产| 欧美精品视频www在线观看| 欧美午夜在线观看| 亚洲欧洲精品一区二区精品久久久| 久久综合五月天婷婷伊人| 依依成人精品视频| 国产精品一区免费在线观看| 欧美裸体bbwbbwbbw| 国产精品久线观看视频| 久久99精品一区二区三区| 91麻豆国产香蕉久久精品| 精品国产免费一区二区三区四区| 一区二区三区四区蜜桃| 成人午夜电影久久影院| 5858s免费视频成人| 一区二区三区在线视频免费观看| 夫妻av一区二区| 久久毛片高清国产| 乱中年女人伦av一区二区| 欧美精三区欧美精三区| 午夜视频久久久久久| 色综合久久六月婷婷中文字幕| 久久久91精品国产一区二区精品 | 韩国一区二区三区| 6080yy午夜一二三区久久| 一区二区三区在线看| av在线一区二区| 欧美国产一区二区| 国产美女精品在线| 精品国产亚洲在线| 久久99久久精品| 26uuu国产一区二区三区| 国产精品综合网| 欧美日韩国产高清一区二区| 一区二区三区在线观看视频| 99久久精品一区二区| 国产精品私人影院| 99久久婷婷国产精品综合| 欧美国产禁国产网站cc| 日韩精品国产欧美| 国产精品123区| 中文字幕亚洲不卡| 99久久99久久精品免费观看| 亚洲综合在线五月| 欧美一区午夜视频在线观看| 国产精品自在在线| 一区二区激情小说| 日韩欧美另类在线| 欧美一区二区三区色| 肉肉av福利一精品导航| 国产精品久久免费看| 精品欧美久久久| 欧美美女一区二区| 日本道精品一区二区三区| 国产精品乡下勾搭老头1| 日本不卡视频在线观看| 亚洲欧美日韩一区二区 | 久久综合色综合88| 欧美日韩国产高清一区二区三区 | 日韩视频免费观看高清完整版 | 欧美在线观看视频一区二区三区| 一区二区在线观看免费视频播放| 7777精品伊人久久久大香线蕉最新版| 麻豆一区二区三| 亚洲一区在线观看视频| 久久久久久久精| 欧美午夜精品久久久| 美女网站一区二区| 久久综合给合久久狠狠狠97色69| 欧美久久久影院| 欧美电影一区二区| 欧美美女一区二区在线观看| 精品亚洲porn| 欧美国产禁国产网站cc| 国产一区二区日韩精品| 国产日韩欧美亚洲| 丝袜脚交一区二区| 精品国产91久久久久久久妲己| 麻豆中文一区二区| 欧美xxxxxxxx| 日韩欧美一级精品久久| 欧美综合亚洲图片综合区| caoporn国产精品| 不卡的av在线| 日本道在线观看一区二区| 一本色道综合亚洲| 日本精品一区二区三区高清| 欧美日韩精品是欧美日韩精品| 欧美色网一区二区| 日韩欧美一级精品久久| 国产精品亲子伦对白| 亚洲一区二区三区四区的| 免费观看在线综合| 99精品在线免费| 久久精品水蜜桃av综合天堂| 亚洲精品午夜久久久| 久久99精品久久只有精品| 欧美视频在线一区二区三区|