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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? isostrm.c

?? Appliction => rs232測(cè)試 應(yīng)用程式 Driver => usb to rs232 驅(qū)動(dòng)程式(wdm ddk) DLL => 應(yīng)用程式 Firmware =&g
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
 	}

	IsoUsb_DecrementIoCount(deviceObject); // also deccrement global pending IRP count

    ISOUSB_KdPrint (DBGLVL_MAXIMUM,(" ENTER IsoUsb_IsoIrp_Complete(), streamObject->PendingIrps = dec %d\n", streamObject->PendingIrps));

	// Check the IRP and URB status in the transferObject
    // Here is where a driver for a real device would collect and/or process data in the buffers
    status = IsoUsb_ProcessTransfer(transferObject);

	ISOUSB_KdPrintCond( DBGLVL_MEDIUM,(!NT_SUCCESS(status)), ("IsoUsb_IsoIrp_Complete() BAD transfer status 0x%x\n", status));

	if( !NT_SUCCESS(status) ) {
	    IsoUsb_ResetParentPort( DeviceObject );
    }

	// See if a stop stream has been requested..
	if( streamObject->IsoStreamStarted ) {// this is set FALSE when we get a stop stream ioctl request

		// Last xfer was OK and no stop has been requested;
		// Resubmit the whole thing again and recycle it..
		ISOUSB_KdPrint (DBGLVL_MAXIMUM,("IsoUsb_IsoIrp_Complete() ABOUT TO RECYCLE IRP AND URB!\n"));
		IsoUsb_InitializeStreamUrb(DeviceObject, transferObject);

		nextStack = IoGetNextIrpStackLocation(Irp);
		ASSERT(nextStack != NULL);

		nextStack->Parameters.Others.Argument1 = transferObject->Urb;
		nextStack->Parameters.DeviceIoControl.IoControlCode =
			IOCTL_INTERNAL_USB_SUBMIT_URB;
		nextStack->MajorFunction = IRP_MJ_INTERNAL_DEVICE_CONTROL;


        IoSetCompletionRoutine(Irp,
                IsoUsb_IsoIrp_Complete,
                transferObject, //pass transfer object as Context
                TRUE,  // Invoke on Success
                TRUE,  // Invoke on Error
                TRUE); // Invoke on Cancel


		// increment this stream object's pending irp count
		streamObject->PendingIrps++;
		// increment this stream object's total times recycled count
		streamObject->TimesRecycled++;
		// also increment global pending IRP count
		IsoUsb_IncrementIoCount(deviceObject);

		//
		// Resubmit the request...
        // Note that if the driver has actually done a  fair amount of data processing
        // or copying from packet buffers, you may want to schedule a dpc
        // to resubmit instead of doing it here
		//
		status = IoCallDriver(deviceExtension->TopOfStackDeviceObject,
							  Irp);
	}
	

    ISOUSB_KdPrint (DBGLVL_MAXIMUM,(" EXIT IsoUsb_IsoIrp_Complete(), streamObject->PendingIrps = dec %d\n", streamObject->PendingIrps));

    return STATUS_MORE_PROCESSING_REQUIRED;
}


VOID
IsoUsb_StreamTimeoutDPC(
    IN PKDPC Dpc,
    IN PVOID DeferredContext,
    IN PVOID SystemArgument1,
    IN PVOID SystemArgument2
    )
/*++

Routine Description:

  Check for data capture problems
  Stop stream if problems found

Arguments:

Return Value:

    The function value is the final status from the operation.

--*/
{
    PDEVICE_EXTENSION deviceExtension;
    PDEVICE_OBJECT deviceObject;
    PISOUSB_STREAM_OBJECT streamObject;
    BOOLEAN inQueue;
    LARGE_INTEGER dueTime;

    streamObject = DeferredContext;
    deviceObject = streamObject->DeviceObject;
    deviceExtension = deviceObject->DeviceExtension;

    //



    //
    // schedule next one
    //

    if (streamObject->IsoStreamStarted) {

        KeInitializeTimer(&streamObject->TimeoutTimer);
        KeInitializeDpc(&streamObject->TimeoutDpc,
                        IsoUsb_StreamTimeoutDPC,
                        streamObject);

        dueTime.QuadPart = -10000 * ISOUSB_STREAM_TIMEOUT_INTERVAL;

        inQueue = KeSetTimer(&streamObject->TimeoutTimer,
                             dueTime,
                             &streamObject->TimeoutDpc);

        ASSERT(inQueue == FALSE);  // assert timer not already in system queue

    }
}


NTSTATUS
IsoUsb_StartIsoStream(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
    )
/*++

Routine Description:

	Handler for IOCTL_ISOUSB_START_ISO_STREAM

Arguments:

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

    Irp -

Return Value:

    NT status code

--*/
{
    ULONG i;
    NTSTATUS ntStatus = STATUS_SUCCESS;
    PIO_STACK_LOCATION irpStack;
    ULONG inputBufferLength;
    ULONG outputBufferLength;
    PULONG_PTR streamObjectHandle;
    PISOUSB_STREAM_OBJECT streamObject;
    LARGE_INTEGER dueTime;
    BOOLEAN inQueue;
	PUSBD_PIPE_INFORMATION PipeInfo;
    PDEVICE_EXTENSION deviceExtension = DeviceObject->DeviceExtension;

    irpStack = IoGetCurrentIrpStackLocation (Irp);

    streamObjectHandle = Irp->AssociatedIrp.SystemBuffer;
    inputBufferLength  = irpStack->Parameters.DeviceIoControl.InputBufferLength;
    outputBufferLength = irpStack->Parameters.DeviceIoControl.OutputBufferLength;

    if ( outputBufferLength  < sizeof(*streamObjectHandle) ) {

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

        return STATUS_INVALID_PARAMETER;
    }

    streamObject = ExAllocatePool(NonPagedPool, sizeof(ISOUSB_STREAM_OBJECT));

    if (streamObject) {


		RtlZeroMemory( streamObject, sizeof(ISOUSB_STREAM_OBJECT));

		// hard code to 5th pipe; this is the iso in pipe on our test board
		PipeInfo = &(deviceExtension->UsbInterface->Pipes[4]);

		ISOUSB_KdPrint (DBGLVL_MEDIUM,(" ENTER IsoUsb_StartIsoStream()  pipe %x\n", PipeInfo));

		deviceExtension->PipeInfo[4].fPipeOpened = TRUE; // set flag for this pipe opened
		deviceExtension->OpenPipeCount++;

		// try to power up device if its not already in D0
		IsoUsb_SelfSuspendOrActivate( DeviceObject, FALSE );

        streamObject->DeviceObject = DeviceObject;
        streamObject->PipeInfo = PipeInfo;
        streamObject->IsoStreamStarted = TRUE;

		// event to be set when PendingIrps == 0; signals stream can be stopped
		KeInitializeEvent(&streamObject->NoPendingIrpEvent, NotificationEvent, FALSE);

        // This initializes the pair of IRP/URBS that we will keep endlessly recycling
		// until the Iso stream is stoppped; at least one of these pairs will always be in
		// use and one will be available so continuous throughput is maintained.
		for (i=0; i< ISOUSB_MAX_IRP; i++) {

            ntStatus = IsoUsb_StartTransfer(DeviceObject,
                                            streamObject,
                                            i);

            if (!NT_SUCCESS(ntStatus)) {
				ISOUSB_Trap(DBGLVL_MAXIMUM);
                break;
            }

        }

		// We are returning the pointer to our stream object as an untyped handle to the user
        *streamObjectHandle = (ULONG_PTR) streamObject;

        //
        // start the timeout DPC
        //

        KeInitializeTimer(&streamObject->TimeoutTimer);
        KeInitializeDpc(&streamObject->TimeoutDpc,
                        IsoUsb_StreamTimeoutDPC,
                        streamObject);

        dueTime.QuadPart = -10000 * ISOUSB_STREAM_TIMEOUT_INTERVAL;

        inQueue = KeSetTimer(&streamObject->TimeoutTimer,
                             dueTime,
                             &streamObject->TimeoutDpc);


    } else {
        ntStatus = STATUS_INSUFFICIENT_RESOURCES;
    }

	// We are returning the size of our stream object pointer to the user
    Irp->IoStatus.Information = sizeof(*streamObjectHandle);
    Irp->IoStatus.Status = ntStatus;

    ISOUSB_KdPrint (DBGLVL_MEDIUM,(" EXIT IsoUsb_StartIsoStream() %x\n", ntStatus));

    return ntStatus;
}


NTSTATUS
IsoUsb_StopIsoStream(
    IN PDEVICE_OBJECT DeviceObject,
    IN PISOUSB_STREAM_OBJECT StreamObject,
    IN PIRP Irp
    )
/*++

Routine Description:

	Handler for IOCTL_ISOUSB_STOP_ISO_STREAM

Arguments:

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

    StreamObject - pointer to the ISOUSB_STREAM_OBJECT; We returned this pointer to the user
	  in the return data buffer from their IOCTL_ISOUSB_START_ISO_STREAM call

    Irp - The current IRP for this request

Return Value:

    NT status code

--*/
{
	PUSBD_PIPE_INFORMATION pipe;
	int i;
    PDEVICE_EXTENSION deviceExtension = DeviceObject->DeviceExtension;
    ULONG packetSize, numPackets, maxXferSize;


	// validate the input parm; its DeviceObject member should match our DeviceObject
	ISOUSB_KdPrintCond (DBGLVL_MEDIUM,
						(!StreamObject || (StreamObject->DeviceObject != DeviceObject)),
						("ENTER IsoUsb_StopIsoStream() StreamObject parm INVALID!!!!!\n"));	

	// See if we were called with a bogus or NULL StreamObject parm;
	// This could happen if user calls without ever having successfully started a stream
    if (!StreamObject || (StreamObject->DeviceObject != DeviceObject))
		return STATUS_INVALID_PARAMETER;

	maxXferSize = StreamObject->PipeInfo->MaximumTransferSize;  // We set this
    packetSize = StreamObject->PipeInfo->MaximumPacketSize;	    // USBD sets this
    numPackets = maxXferSize / packetSize;

	// Tell IsoUsb_StreamTimeoutDPC() not to reschedule itself on next timeout
	// This also flags IsoUsb_IsoIrp_Complete() to stop recycling the pair of stream IRP/Urbs
	StreamObject->IsoStreamStarted = FALSE;

    // Wait for any io request pending for this stream object to
    // complete before returning success.
	// This  event is set when streamObject->PendingIrpCount goes to 0
    KeWaitForSingleObject(
                &StreamObject->NoPendingIrpEvent,
                Suspended,
                KernelMode,
                FALSE,
                NULL);


    ISOUSB_KdPrint (DBGLVL_DEFAULT, ("IsoUsb_StopIsoStream() StreamObject->TimesRecycled = decimal %d,  0x%x\n",
		StreamObject->TimesRecycled , StreamObject->TimesRecycled));
    ISOUSB_KdPrint (DBGLVL_DEFAULT, ("IsoUsb_StopIsoStream() Total packets processed = decimal %d\n",
		StreamObject->TotalPacketsProcessed ));
    ISOUSB_KdPrint (DBGLVL_DEFAULT, ("IsoUsb_StopIsoStream() Total stream bytes processed  = decimal %d\n",
		StreamObject->TotalBytesProcessed ));
    ISOUSB_KdPrint (DBGLVL_DEFAULT, ("EXIT IsoUsb_StopIsoStream() Error Packet Count  = decimal %d\n",
		StreamObject->ErrorPacketCount ));


    // Free all the buffers, URBS, and Irps associated with our stream object
	for (i=0; i< ISOUSB_MAX_IRP; i++) {
		PISOUSB_TRANSFER_OBJECT transferObject;

		transferObject = StreamObject->TransferObjectList[i];

		ISOUSB_ASSERT( transferObject );

		ISOUSB_ASSERT( transferObject->Irp );
		IoFreeIrp( transferObject->Irp );

		ISOUSB_ASSERT( transferObject->Urb );
		ExFreePool( transferObject->Urb );

		ISOUSB_ASSERT( transferObject->DataBuffer );
		ExFreePool( transferObject->DataBuffer );

		ExFreePool( transferObject );
    }

	ExFreePool( StreamObject ); // also free the stream object itself


	// Close our Iso input pipe;
	// Hard-code to 5th pipe; this is the iso input pipe on our test board
	pipe = &(deviceExtension->UsbInterface->Pipes[4]);

	deviceExtension->PipeInfo[4].fPipeOpened = FALSE; // set flag for this pipe closed
	deviceExtension->OpenPipeCount--;

	// ISSUE? Not sure why this is neccesary, but it is...
	IsoUsb_ResetParentPort( DeviceObject );

	// try to power down device if we just closed the last open pipe
	IsoUsb_SelfSuspendOrActivate( DeviceObject, TRUE );

	return STATUS_SUCCESS;

}







?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美国产日韩a欧美在线观看 | 久久超碰97中文字幕| 黑人精品欧美一区二区蜜桃 | 自拍av一区二区三区| 亚洲一区二区精品3399| 国产一区二区三区美女| 欧美日韩一区中文字幕| 国产喂奶挤奶一区二区三区| 日韩激情视频网站| 日本精品裸体写真集在线观看 | 国产一区二区三区免费看| 日本乱人伦aⅴ精品| 中文字幕一区二区在线观看| 蜜桃一区二区三区在线| 欧美日韩国产高清一区二区| 自拍偷拍亚洲激情| 丁香一区二区三区| 久久噜噜亚洲综合| 激情伊人五月天久久综合| 欧美猛男gaygay网站| 亚洲精品一二三四区| 波多野结衣欧美| 欧美不卡视频一区| 免费看黄色91| 日韩西西人体444www| 大胆亚洲人体视频| 久久久久久久久一| 国产一区二区三区免费观看| 久久婷婷综合激情| 国产高清在线观看免费不卡| 久久亚洲欧美国产精品乐播| 国产麻豆精品theporn| 久久综合久久综合九色| 狠狠色狠狠色综合日日91app| 欧美成人一级视频| 久久99精品久久久久久| 久久在线观看免费| 国产高清视频一区| 中文字幕第一页久久| 9人人澡人人爽人人精品| 中文字幕中文字幕一区| 91视频免费播放| 亚洲精品中文在线观看| 欧美高清www午色夜在线视频| 天堂精品中文字幕在线| 精品久久久久久久一区二区蜜臀| 免费观看一级欧美片| 精品国免费一区二区三区| 韩国精品久久久| 国产免费久久精品| 色呦呦日韩精品| 日韩1区2区3区| 国产日韩欧美高清在线| 91老师国产黑色丝袜在线| 亚洲一区中文日韩| 日韩精品一区二区三区三区免费| 国产综合久久久久久鬼色| 国产精品女人毛片| 欧美日韩情趣电影| 韩国在线一区二区| 亚洲情趣在线观看| 欧美一区二区三区在线观看| 国产一区二区看久久| 亚洲精品免费在线观看| 日韩欧美黄色影院| 99精品桃花视频在线观看| 午夜精品影院在线观看| 国产亚洲精品免费| 欧美日韩成人综合天天影院| 国产毛片精品一区| 亚洲bt欧美bt精品| 国产精品视频免费看| 欧美精品18+| 成人高清视频在线观看| 免费人成在线不卡| 一区二区三区在线视频免费观看| 欧美zozo另类异族| 欧美少妇bbb| 成人深夜视频在线观看| 亚洲精品高清在线观看| 久久综合国产精品| 欧美性大战久久久久久久蜜臀| 日韩黄色片在线观看| 日本一区二区免费在线| 欧美一级欧美一级在线播放| 成人综合日日夜夜| 黑人巨大精品欧美一区| 日韩一区欧美二区| 亚洲精品乱码久久久久久黑人 | 欧美精品v国产精品v日韩精品 | 欧美三区在线观看| 成人污视频在线观看| 理论电影国产精品| 午夜视频一区在线观看| 亚洲丝袜自拍清纯另类| 久久久精品国产免大香伊| 在线电影院国产精品| 色天天综合色天天久久| 欧美在线一区二区| 99re8在线精品视频免费播放| 黄色日韩三级电影| 蜜桃视频第一区免费观看| 亚洲宅男天堂在线观看无病毒| 国产日韩欧美精品综合| 久久综合狠狠综合| 日韩欧美国产系列| 在线观看一区日韩| 欧美优质美女网站| 欧美中文字幕一区二区三区| 97久久超碰国产精品| www.日韩精品| 99精品国产热久久91蜜凸| 国产91高潮流白浆在线麻豆 | 一个色妞综合视频在线观看| 国产精品欧美极品| 亚洲欧洲韩国日本视频 | 欧美mv日韩mv国产网站| 欧美精品一级二级三级| 91精品啪在线观看国产60岁| 337p亚洲精品色噜噜| 欧美一区二区三区日韩视频| 日韩一区二区在线观看| 日韩精品一区二区三区在线观看 | 中文字幕免费不卡在线| 欧美国产亚洲另类动漫| 1000精品久久久久久久久| 亚洲欧美日韩国产中文在线| 亚洲精品视频在线看| 亚洲午夜久久久| 日本中文字幕一区| 国产一区二区三区日韩| 91色乱码一区二区三区| 欧美影院一区二区三区| 日韩三级高清在线| 欧美国产禁国产网站cc| 亚洲黄色免费电影| 奇米影视在线99精品| 国产一区亚洲一区| 91热门视频在线观看| 欧美另类变人与禽xxxxx| 日韩美女视频在线| 国产精品电影一区二区三区| 亚洲午夜视频在线观看| 精品一区二区三区香蕉蜜桃| 成人av一区二区三区| 在线国产亚洲欧美| 久久久99久久精品欧美| 亚洲欧洲精品一区二区三区| 视频在线观看一区二区三区| 国产精品亚洲人在线观看| 欧美中文字幕一区二区三区| 精品国产电影一区二区| 亚洲精品国产视频| 黑人精品欧美一区二区蜜桃| 在线亚洲免费视频| 精品国产伦一区二区三区观看体验| 国产精品―色哟哟| 麻豆免费精品视频| 色婷婷久久99综合精品jk白丝| 欧美一区二区视频在线观看| 国产精品网站导航| 蜜臀av性久久久久蜜臀aⅴ四虎| 99riav久久精品riav| 欧美精品一区二区三区在线| 一片黄亚洲嫩模| 处破女av一区二区| 欧美一级专区免费大片| 亚洲欧美日韩中文字幕一区二区三区| 美女看a上一区| 欧美三级乱人伦电影| 亚洲国产精品成人综合 | 日韩午夜在线播放| 亚洲一区二区三区免费视频| 高清国产一区二区| 欧美xxxxxxxx| 日韩精品色哟哟| 91免费视频网| 中日韩免费视频中文字幕| aaa亚洲精品| 中文幕一区二区三区久久蜜桃| 蜜桃精品视频在线| 欧美精品在线视频| 午夜精品福利一区二区三区av | 婷婷六月综合网| 欧美在线制服丝袜| 亚洲一级在线观看| 色综合咪咪久久| 国产精品剧情在线亚洲| 国产成人在线视频免费播放| 日韩一区二区三区av| 亚洲精品国产视频| 色婷婷亚洲精品| 伊人夜夜躁av伊人久久| 国产在线精品一区在线观看麻豆| 7777精品伊人久久久大香线蕉超级流畅 | 99久久久国产精品| 国产精品美女久久久久久久久 | 成人性生交大片免费看视频在线 | 久久久久久久久一| 国产成人8x视频一区二区|