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

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

?? d12xp.c

?? 該軟件代碼示范了如何用WINDOWS DDK 及VC++開發環境 進行windows USB 驅動程序編寫
?? C
?? 第 1 頁 / 共 5 頁
字號:
                             *configuration, ntStatus));

            ExFreePool(urb);
            urb = NULL;
        }

  /*      urb = ExAllocatePool(
                  NonPagedPool,
                  sizeof(struct _URB_CONTROL_GET_INTERFACE_REQUEST) + 1);

        if (urb)
        {
            PUCHAR interface;

            interface = (PUCHAR)urb + sizeof(struct _URB_CONTROL_GET_INTERFACE_REQUEST);
            *interface = 0xFF;

            urb->UrbHeader.Function = URB_FUNCTION_GET_INTERFACE;
            urb->UrbHeader.Length = sizeof(struct _URB_CONTROL_GET_INTERFACE_REQUEST);
            urb->UrbControlGetInterfaceRequest.TransferBufferLength = 1;
            urb->UrbControlGetInterfaceRequest.TransferBuffer = interface;
            urb->UrbControlGetInterfaceRequest.TransferBufferMDL = NULL;
            urb->UrbControlGetInterfaceRequest.UrbLink = NULL;
            urb->UrbControlGetInterfaceRequest.Interface =
                deviceExtension->Interface->InterfaceNumber;

            ntStatus = D12_CallUSBD(DeviceObject, urb);

            D12_KdPrint (("D12TEST.SYS: Interface %d (%x)\n",
                             *interface, ntStatus));

            ExFreePool(urb);
            urb = NULL;
        }*/
#ifdef WIN_XP
		urb = ExAllocatePool(
                  NonPagedPool,
                  sizeof(struct _URB_CONTROL_TRANSFER) + 1);

        if (urb)
        {
            PUCHAR control;
			UCHAR SetupToken[8] = {0x81,0x0a,0x00,0x00,0x00,0x00,0x01,0x00};
			int i;
            control = (PUCHAR)urb + sizeof(struct 
            _URB_CONTROL_TRANSFER);
            *control = 0xFF;

            urb->UrbHeader.Function = URB_FUNCTION_CONTROL_TRANSFER ;
            urb->UrbHeader.Length = sizeof(struct _URB_CONTROL_TRANSFER);
            urb->UrbControlTransfer.PipeHandle = NULL;
            urb->UrbControlTransfer.TransferFlags = USBD_DEFAULT_PIPE_TRANSFER ;//USBD_DEFAULT_PIPE_TRANSFER ;
            urb->UrbControlTransfer.TransferBufferLength = 1;
            urb->UrbControlTransfer.TransferBuffer = control;
            urb->UrbControlTransfer.TransferBufferMDL = NULL;
            urb->UrbControlTransfer.UrbLink = NULL;
			for(i=0; i<8;i++){
			urb->UrbControlTransfer.SetupPacket[i] = SetupToken[i];
			}

            ntStatus = D12_CallUSBD(DeviceObject, urb);

            DbgPrint ("SONYPEO1.SYS: Interface  %d (%x)\n",
                             *control, ntStatus);

            ExFreePool(urb);
            urb = NULL;
        }
		
#endif
    }

    D12_KdPrint (("D12TEST.SYS: exit D12_SelectInterface (%x)\n", ntStatus));

    return ntStatus;
}


NTSTATUS
D12_BuildPipeList(
    IN  PDEVICE_OBJECT DeviceObject
    )
/*++

Routine Description:

Arguments:

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


Return Value:

    NT status code

--*/
{
    PDEVICE_EXTENSION deviceExtension;
    ULONG i;
    WCHAR Name[] = L"\\PIPE00";
    PUSBD_INTERFACE_INFORMATION interface;

    deviceExtension = DeviceObject->DeviceExtension;
    interface = deviceExtension->Interface;

    D12_KdPrint (("D12TEST.SYS: enter D12_BuildPipeList\n"));

    deviceExtension = DeviceObject->DeviceExtension;

    for (i=0; i<D12_MAX_PIPES; i++) {

        Name[6] = 'X';
        RtlCopyMemory(deviceExtension->PipeList[i].Name,
                      Name,
                      sizeof(Name));

    }

    //
    // build a list of pipe names based on the interface
    //

    for (i=0; i<interface->NumberOfPipes; i++) {

        Name[6] = '0' + (USHORT) i;
        RtlCopyMemory(deviceExtension->PipeList[i].Name,
                      Name,
                      sizeof(Name));

        deviceExtension->PipeList[i].PipeInfo =
            &interface->Pipes[i];

        deviceExtension->PipeList[i].Opened = FALSE;
    }

    return STATUS_SUCCESS;
}


NTSTATUS
D12_ResetPipe(
    IN PDEVICE_OBJECT DeviceObject,
    IN PD12_PIPE Pipe,
    IN BOOLEAN IsoClearStall
    )
/*++

Routine Description:

    Reset a given USB pipe.
    
    NOTES:

    This will reset the host to Data0 and should also reset the device
    to Data0 for Bulk and Interrupt pipes.

    For Iso pipes this will set the virgin state of pipe so that ASAP
    transfers begin with the current bus frame instead of the next frame
    after the last transfer occurred.

Arguments:

Return Value:


--*/
{
    NTSTATUS ntStatus;
    PURB urb;

    D12_KdPrint (("D12TEST.SYS: Reset Pipe %x\n", Pipe));

    urb = ExAllocatePool(NonPagedPool,
                         sizeof(struct _URB_PIPE_REQUEST));

    if (urb) {

        urb->UrbHeader.Length = (USHORT) sizeof (struct _URB_PIPE_REQUEST);
        urb->UrbHeader.Function = URB_FUNCTION_RESET_PIPE;
        urb->UrbPipeRequest.PipeHandle =
            Pipe->PipeInfo->PipeHandle;

        ntStatus = D12_CallUSBD(DeviceObject, urb);

        ExFreePool(urb);

    } else {
        ntStatus = STATUS_INSUFFICIENT_RESOURCES;
    }

    //
    // Memphis RESET_PIPE will send a Clear-Feature Endpoint Stall to
    // reset the data toggle of non-Iso pipes as part of a RESET_PIPE
    // request.  It does not do this for Iso pipes as Iso pipes do not use
    // the data toggle (all Iso packets are Data0).  However, we also use
    // the Clear-Feature Endpoint Stall request in our device firmware to
    // reset data buffer points inside the device so we explicitly send
    // this request to the device for Iso pipes if desired.
    //
    if (NT_SUCCESS(ntStatus) && IsoClearStall &&
        (Pipe->PipeInfo->PipeType == UsbdPipeTypeIsochronous)) {
        
        urb = ExAllocatePool(NonPagedPool,
                             sizeof(struct _URB_CONTROL_FEATURE_REQUEST));

        if (urb) {

            UsbBuildFeatureRequest(urb,
                                   URB_FUNCTION_CLEAR_FEATURE_TO_ENDPOINT,
                                   USB_FEATURE_ENDPOINT_STALL,
                                   Pipe->PipeInfo->EndpointAddress,
                                   NULL);

            ntStatus = D12_CallUSBD(DeviceObject, urb);

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

    return ntStatus;
}


LONG
D12_DecrementIoCount(
    IN PDEVICE_OBJECT DeviceObject
    )
/*++

Routine Description:

Arguments:

Return Value:


--*/
{
    PDEVICE_EXTENSION deviceExtension;
    LONG ioCount;

    deviceExtension = DeviceObject->DeviceExtension;

    ioCount = InterlockedDecrement(&deviceExtension->PendingIoCount);

    D12_KdPrint (("D12TEST.SYS: Pending io count = %x\n", ioCount));

    if (ioCount==0) {
        KeSetEvent(&deviceExtension->RemoveEvent,
                   1,
                   FALSE);
    }

    return ioCount;
}


VOID
D12_IncrementIoCount(
    IN PDEVICE_OBJECT DeviceObject
    )
/*++

Routine Description:

Arguments:

Return Value:


--*/
{
    PDEVICE_EXTENSION deviceExtension;

    deviceExtension = DeviceObject->DeviceExtension;

    InterlockedIncrement(&deviceExtension->PendingIoCount);
}


NTSTATUS
D12_ReconfigureDevice(
    IN  PDEVICE_OBJECT DeviceObject
    )
/*++

Routine Description:

    Initializes a given instance of the device on the USB and selects the
    configuration.

Arguments:

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


Return Value:

    NT status code

--*/
{
    PDEVICE_EXTENSION deviceExtension;
    NTSTATUS ntStatus = STATUS_SUCCESS;
    PUSBD_INTERFACE_INFORMATION interface;
    ULONG i;

    D12_KdPrint (("D12TEST.SYS: enter D12_ReconfigureDevice\n"));

    deviceExtension = DeviceObject->DeviceExtension;

    if (NT_SUCCESS(ntStatus)) {
        ntStatus = D12_ConfigureDevice(DeviceObject);
    }

    //
    // new interface structure is now set up
    //

    interface = deviceExtension->Interface;

    //
    // set up the pipe handles again
    //

    for (i=0; i<interface->NumberOfPipes; i++) {

        D12_KdPrint (("D12TEST.SYS: pipe list = %x\n", &deviceExtension->PipeList[i]));

        deviceExtension->PipeList[i].PipeInfo =
            &interface->Pipes[i];

        //deviceExtension->PipeList[i].Opened = FALSE;
    }

    return ntStatus;
}
NTSTATUS
D12_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;

}

NTSTATUS
D12_SelfSuspendOrActivate(
    IN PDEVICE_OBJECT DeviceObject,
    IN BOOLEAN fSuspend
    )
/*++

Routine Description:

        Called on D12_PnPAddDevice() to power down until needed (i.e., till a pipe is actually opened).
        Called on D12_Create() to power up device to D0 before opening 1st pipe.
        Called on D12_Close() to power down device if this is the last pipe.

Arguments:

    DeviceObject - Pointer to the device object

    fSuspend; TRUE to Suspend, FALSE to acivate.


Return Value:

    If the operation is not attemtped, SUCCESS is returned.
    If the operation is attemtped, the value is the final status from the operation.
????
--*/
{
    NTSTATUS ntStatus = STATUS_SUCCESS;

    POWER_STATE PowerState;
    PDEVICE_EXTENSION deviceExtension;


    deviceExtension = DeviceObject->DeviceExtension;
    DbgPrint("Enter D12_SelfSuspendOrActivate(),fSuspend = %d\n", fSuspend);


        // Can't accept request if:
    //  1) device is removed,
    //  2) has never been started,
    //  3) is stopped,
    //  4) has a remove request pending,
    //  5) has a stop device pending
    if ( !D12_CanAcceptIoRequests( DeviceObject ) ) {
        ntStatus = STATUS_DELETE_PENDING;

                DbgPrint("D12 D12_SelfSuspendOrActivate()\n");
        return ntStatus;
    }


    // don't do anything if any System-generated Device Pnp irps are pending
    if ( NULL != deviceExtension->PowerIrp ) {
        DbgPrint("Exit D12_SelfSuspendOrActivate(),refusing on pending deviceExtension->PowerIrp 0x%x\n", deviceExtension->PowerIrp);
        return ntStatus;
    }

    // don't do anything if any self-generated Device Pnp irps are pending
    if ( deviceExtension->SelfPowerIrp ) {
        DbgPrint("Exit D12_SelfSuspendOrActivate(),refusing on pending deviceExtension->SelfPowerIrp\n" );
        return ntStatus;
    }

    // don't auto-suspend if any pipes are open
    if ( fSuspend && ( 0 != deviceExtension->OpenPipeCount ) ) {
        DbgPrint("Exit D12_SelfSuspendOrActivate(),refusing to self-suspend on OpenPipeCount %d\n", deviceExtension->OpenPipeCount);
        return ntStatus;
    }

    // don't auto-activate if no pipes are open
    if ( !fSuspend && ( 0 == deviceExtension->OpenPipeCount ) ) {
        DbgPrint("Exit D12_SelfSuspendOrActivate(),refusing to self-activate, no pipes open\n");
        return ntStatus;
    }

    // dont do anything if registry CurrentControlSet\Services\D12\Parameters\PowerDownLevel
    //  has been set to  zero, PowerDeviceD0 ( 1 ), or a bogus high value
    if ( ( deviceExtension->PowerDownLevel == PowerDeviceD0 ) ||
         ( deviceExtension->PowerDownLevel == PowerDeviceUnspecified)  ||
         ( deviceExtension->PowerDownLevel >= PowerDeviceMaximum ) ) {
        DbgPr

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品久久一区二区三区| 欧美一区二区三区在| 男女男精品视频网| 日本特黄久久久高潮| 日本最新不卡在线| 美脚の诱脚舐め脚责91| 精品亚洲aⅴ乱码一区二区三区| 日本欧美在线看| 久久精品国产秦先生| 九九精品视频在线看| 国产九色精品成人porny| 国产精品一二三| 99re66热这里只有精品3直播| aaa欧美色吧激情视频| 91福利视频网站| 制服丝袜成人动漫| 欧美精品一区二区高清在线观看| 337p日本欧洲亚洲大胆色噜噜| 久久久久久久久久久久久夜| 国产欧美一区二区三区沐欲| 中文字幕一区二| 五月天丁香久久| 国产精品亚洲视频| 欧美亚洲动漫另类| 欧美一区二区三区的| 久久综合一区二区| 亚洲美腿欧美偷拍| 精品在线免费视频| 91视频一区二区| 欧美一三区三区四区免费在线看 | 亚洲综合视频在线| 麻豆成人av在线| 91麻豆高清视频| 日韩一区二区在线观看| 国产精品天美传媒| 美女尤物国产一区| 日本精品一级二级| 精品国产凹凸成av人网站| 亚洲欧美福利一区二区| 精品在线免费观看| 欧美日韩一二区| 国产精品全国免费观看高清| 美洲天堂一区二卡三卡四卡视频| 国产精品亚洲专一区二区三区| 欧美色欧美亚洲另类二区| 国产日产精品1区| 肉色丝袜一区二区| 91精彩视频在线观看| 国产精品无人区| 国内精品视频666| 欧美高清视频一二三区| 亚洲同性同志一二三专区| 激情成人综合网| 日韩一区二区三区四区| 亚洲国产精品一区二区尤物区| 成人免费看黄yyy456| 欧美精品一区二区三区高清aⅴ | 99久久伊人网影院| 国产日韩欧美不卡在线| 久久国产精品99精品国产| 欧美影院精品一区| 亚洲精品中文在线影院| 99精品久久久久久| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 日韩精品一二三四| 欧美年轻男男videosbes| 亚洲精品亚洲人成人网| 色综合久久中文字幕| 国产精品理论片| 波波电影院一区二区三区| 国产午夜精品美女毛片视频| 国内精品国产成人| 国产亚洲福利社区一区| 国产成人综合在线播放| 国产色一区二区| 国产成人福利片| 国产精品三级电影| 91在线视频免费观看| 亚洲图片你懂的| 欧美视频一区二区三区四区 | 日本麻豆一区二区三区视频| 4438x成人网最大色成网站| 蜜臀久久99精品久久久久久9| 7777精品伊人久久久大香线蕉超级流畅 | 久久天堂av综合合色蜜桃网| 精品一区二区三区免费观看| 精品国产亚洲在线| 国产精品1区2区3区在线观看| 国产精品久久久久久久裸模| 99精品视频在线观看免费| 亚洲激情一二三区| 7777精品伊人久久久大香线蕉超级流畅 | 欧洲av在线精品| 轻轻草成人在线| wwww国产精品欧美| 99久久国产综合色|国产精品| 亚洲午夜久久久| 精品区一区二区| 91在线观看美女| 天天综合日日夜夜精品| 国产欧美综合色| 8x8x8国产精品| 懂色av中文一区二区三区 | 日本va欧美va精品| 久久久国产精品午夜一区ai换脸| 成人精品电影在线观看| 一区二区三区视频在线看| 在线播放中文一区| 国产一区视频网站| 亚洲午夜日本在线观看| 国产性做久久久久久| 欧美午夜视频网站| 丁香婷婷综合网| 午夜久久久影院| 国产精品久久久久7777按摩| 91麻豆精品国产91久久久久久| 国产a精品视频| 免费成人在线视频观看| 国产一区二区三区精品欧美日韩一区二区三区 | 麻豆视频一区二区| 亚洲精品伦理在线| 国产欧美日韩一区二区三区在线观看| 欧美这里有精品| 成人免费毛片高清视频| 精品综合久久久久久8888| 亚洲综合丝袜美腿| 国产精品国产a级| 久久精品欧美日韩精品| 91精品国产综合久久小美女| av资源网一区| 国产精品18久久久久久vr| 欧美aaaaaa午夜精品| 亚洲激情一二三区| 国产精品成人在线观看 | 成人黄色网址在线观看| 韩国午夜理伦三级不卡影院| 午夜视黄欧洲亚洲| 亚洲一区二区在线视频| 亚洲精品视频观看| 国产精品成人免费精品自在线观看| 欧美大片一区二区| 欧美一级二级在线观看| 色成年激情久久综合| 色综合欧美在线| 91一区一区三区| 99麻豆久久久国产精品免费| 成人精品免费视频| 国产suv精品一区二区6| 国产成人av一区二区三区在线 | 欧美在线影院一区二区| 91丝袜美女网| 色哟哟日韩精品| 色老头久久综合| 欧美性大战久久久久久久蜜臀 | 欧美亚洲国产一区二区三区va | 久热成人在线视频| 老司机精品视频在线| 91视视频在线观看入口直接观看www | 国产精华液一区二区三区| 精品写真视频在线观看| 国产精品亚洲专一区二区三区 | 欧美在线free| 欧美日本在线观看| 91麻豆精品国产自产在线观看一区 | 欧美日韩国产小视频在线观看| 91久久精品国产91性色tv| 91麻豆文化传媒在线观看| 91美女蜜桃在线| 欧美日产在线观看| 精品少妇一区二区三区| 日本一区二区三区免费乱视频| 国产欧美日韩卡一| 国产一区久久久| 成人午夜伦理影院| 欧美亚洲国产一区二区三区| 日韩精品一区二区三区四区视频| 欧美不卡在线视频| 国产精品不卡一区二区三区| 亚洲最大成人综合| 精品亚洲免费视频| 97久久超碰国产精品电影| 欧美电影一区二区| 久久这里只有精品6| 亚洲精品视频一区| 蜜桃视频在线观看一区二区| 成人深夜福利app| 在线电影欧美成精品| 国产精品女主播av| 亚洲一级片在线观看| 国产一区二区福利视频| 成人免费av在线| 欧美高清hd18日本| 国产日韩欧美综合在线| 调教+趴+乳夹+国产+精品| 国产精品456露脸| 欧美私人免费视频| 中文字幕精品在线不卡| 肉色丝袜一区二区| av午夜精品一区二区三区| 91精品国产色综合久久不卡电影 |