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

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

?? device.cpp

?? D12+51 的USB1.1PC就用程序
?? CPP
字號:
/*
   //*************************************************************************
   //
   //                  P H I L I P S   P R O P R I E T A R Y
   //
   //           COPYRIGHT (c)   1998 BY PHILIPS SINGAPORE.
   //                     --  ALL RIGHTS RESERVED  --
   //
   // File Name:	Device.CPP
   // Author:		Wenkai Du
   // Created:		14 Jun 98
   // Modified:
   // Revision:		1.0
   //
   //*************************************************************************
   //
   //*************************************************************************
   */

#include "stdafx.h"

#include <windows.h>

#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <time.h>

#include <devioctl.h>
#include <setupapi.h>
#include <basetyps.h>
#include <usbdi.h>

#include "ioctl.h"
#include "GUID829.h"

char completeDeviceName[256] = "";  //generated from the GUID registered by the driver itself 



/*++
Routine Description:

    Given the HardwareDeviceInfo, representing a handle to the plug and
    play information, and deviceInfoData, representing a specific usb device,
    open that device and fill in all the relevant information in the given
    USB_DEVICE_DESCRIPTOR structure.

Arguments:

    HardwareDeviceInfo:  handle to info obtained from Pnp mgr via SetupDiGetClassDevs()
    DeviceInfoData:      ptr to info obtained via SetupDiEnumInterfaceDevice()

Return Value:

    return HANDLE if the open and initialization was successfull,
	else INVLAID_HANDLE_VALUE.

--*/
HANDLE   OpenOneDevice ( IN  HDEVINFO  HardwareDeviceInfo,
                         IN  PSP_INTERFACE_DEVICE_DATA  DeviceInfoData,
						 IN	 char *devName )

{
    PSP_INTERFACE_DEVICE_DETAIL_DATA     functionClassDeviceData = NULL;
    ULONG                                predictedLength = 0;
    ULONG                                requiredLength = 0;
	HANDLE								 hOut = INVALID_HANDLE_VALUE;

    //
    // allocate a function class device data structure to receive the
    // goods about this particular device.
    //
    SetupDiGetInterfaceDeviceDetail (
            HardwareDeviceInfo,
            DeviceInfoData,
            NULL, // probing so no output buffer yet
            0, // probing so output buffer length of zero
            &requiredLength,
            NULL); // not interested in the specific dev-node


    predictedLength = requiredLength;
    // sizeof (SP_FNCLASS_DEVICE_DATA) + 512;

    functionClassDeviceData = (PSP_INTERFACE_DEVICE_DETAIL_DATA)malloc (predictedLength);
    functionClassDeviceData->cbSize = sizeof (SP_INTERFACE_DEVICE_DETAIL_DATA);

    //
    // Retrieve the information from Plug and Play.
    //
    if (! SetupDiGetInterfaceDeviceDetail (
               HardwareDeviceInfo,
               DeviceInfoData,
               functionClassDeviceData,
               predictedLength,
               &requiredLength,
               NULL)) {
        return INVALID_HANDLE_VALUE;
    }

	strcpy( devName,functionClassDeviceData->DevicePath) ;

    hOut = CreateFile (
                  functionClassDeviceData->DevicePath,
                  GENERIC_READ | GENERIC_WRITE,
                  FILE_SHARE_READ | FILE_SHARE_WRITE,
                  NULL, // no SECURITY_ATTRIBUTES structure
                  OPEN_EXISTING, // No special create flags
                  0, // No special attributes
                  NULL); // No template file

    if (INVALID_HANDLE_VALUE == hOut) {
    }

	free(functionClassDeviceData);

	return hOut;
}

/*++
Routine Description:

   Do the required PnP things in order to find 
   the next available proper device in the system at this time.

Arguments:

    pGuid:      ptr to GUID registered by the driver itself
    outNameBuf: the generated name for this device

Return Value:

    return HANDLE if the open and initialization was successful,
	else INVLAID_HANDLE_VALUE.
--*/
HANDLE OpenUsbDevice( LPGUID  pGuid, char *outNameBuf)
{
   ULONG NumberDevices;
   HANDLE hOut = INVALID_HANDLE_VALUE;
   HDEVINFO                 hardwareDeviceInfo;
   SP_INTERFACE_DEVICE_DATA deviceInfoData;
   ULONG                    i;
   BOOLEAN                  done;
   PUSB_DEVICE_DESCRIPTOR   usbDeviceInst;
   PUSB_DEVICE_DESCRIPTOR	*UsbDevices = &usbDeviceInst;

   *UsbDevices = NULL;
   NumberDevices = 0;

   //
   // Open a handle to the plug and play dev node.
   // SetupDiGetClassDevs() returns a device information set that contains info on all 
   // installed devices of a specified class.
   //
   hardwareDeviceInfo = SetupDiGetClassDevs (
                           pGuid,
                           NULL, // Define no enumerator (global)
                           NULL, // Define no
                           (DIGCF_PRESENT | // Only Devices present
                            DIGCF_INTERFACEDEVICE)); // Function class devices.

   //
   // Take a wild guess at the number of devices we have;
   // Be prepared to realloc and retry if there are more than we guessed
   //
   NumberDevices = 4;
   done = FALSE;
   deviceInfoData.cbSize = sizeof (SP_INTERFACE_DEVICE_DATA);

   i=0;
   while (!done) 
   {
      NumberDevices *= 2;

      if (*UsbDevices)
	  {
         *UsbDevices =
               (PUSB_DEVICE_DESCRIPTOR)realloc (*UsbDevices, (NumberDevices * sizeof (USB_DEVICE_DESCRIPTOR)));
      } 
	  else 
	  {
         *UsbDevices = (PUSB_DEVICE_DESCRIPTOR)calloc (NumberDevices, sizeof (USB_DEVICE_DESCRIPTOR));
      }

      if (NULL == *UsbDevices)
	  {

         // SetupDiDestroyDeviceInfoList destroys a device information set 
         // and frees all associated memory.

         SetupDiDestroyDeviceInfoList (hardwareDeviceInfo);
         return INVALID_HANDLE_VALUE;
      }

      usbDeviceInst = *UsbDevices + i;

      for (; i < NumberDevices; i++)
	  {

         // SetupDiEnumDeviceInterfaces() returns information about device interfaces 
         // exposed by one or more devices. Each call returns information about one interface;
         // the routine can be called repeatedly to get information about several interfaces
         // exposed by one or more devices.

         if (SetupDiEnumDeviceInterfaces (hardwareDeviceInfo,
                                         0, // We don't care about specific PDOs
										 pGuid,
                                         i,
                                         &deviceInfoData)) 
		 {

            hOut = OpenOneDevice (hardwareDeviceInfo, &deviceInfoData, outNameBuf);
			if ( hOut != INVALID_HANDLE_VALUE )
			{
               done = TRUE;
               break;
			}
         } 
		 else 
		 {
            if (ERROR_NO_MORE_ITEMS == GetLastError())
			{
               done = TRUE;
               break;
            }
         }
      }
   }

   NumberDevices = i;

   // SetupDiDestroyDeviceInfoList() destroys a device information set 
   // and frees all associated memory.

   SetupDiDestroyDeviceInfoList (hardwareDeviceInfo);

   if (*UsbDevices) 
	   free(*UsbDevices);

   return hOut;
}



/*++
Routine Description:

    Given a ptr to a driver-registered GUID, give us a string with the device name
    that can be used in a CreateFile() call.
    Actually briefly opens and closes the device and sets outBuf if successfull;
    returns FALSE if not 

Arguments:

    pGuid:      ptr to GUID registered by the driver itself
    outNameBuf: the generated zero-terminated name for this device

Return Value:

    TRUE on success else FALSE

--*/
BOOL GetUsbDeviceFileName( LPGUID  pGuid, char *outNameBuf)
{
	HANDLE hDev = OpenUsbDevice( pGuid, outNameBuf );
	if ( hDev != INVALID_HANDLE_VALUE )
	{
		CloseHandle( hDev );
		return TRUE;
	}
	return FALSE;
}

/*++
Routine Description:

    Called by dumpUsbConfig() to open an instance of our device

Arguments:

    None

Return Value:

    Device handle on success else NULL

--*/
HANDLE open_dev()
{
	HANDLE hDEV = OpenUsbDevice( (LPGUID)&GUID_CLASS_D12_BULK, completeDeviceName);
	return hDEV;
}

/*++
Routine Description:

    Called by main() to open an instance of our device after obtaining its name

Arguments:

    None

Return Value:

    Device handle on success else NULL

--*/
HANDLE  open_file( char *filename)
{

	HANDLE h;

	if ( !GetUsbDeviceFileName( 
		(LPGUID) &GUID_CLASS_D12_BULK, 
		completeDeviceName) )
	{
		return  INVALID_HANDLE_VALUE; 
	}

    strcat (completeDeviceName,
			"\\"
			);			

    strcat (completeDeviceName,
			filename
			);					

	h = CreateFile(completeDeviceName,
		GENERIC_WRITE | GENERIC_READ,
		FILE_SHARE_WRITE | FILE_SHARE_READ,
		NULL,
		OPEN_EXISTING,
        FILE_FLAG_OVERLAPPED,
//		0,
		NULL);

	return h;
}



?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩亚洲欧美中文三级| 99久久综合色| 另类中文字幕网| 午夜日韩在线电影| 亚洲国产日韩一级| 午夜久久福利影院| 美美哒免费高清在线观看视频一区二区 | 亚洲精品在线三区| 欧美成人性战久久| 久久久精品免费免费| 中文字幕精品综合| 亚洲视频一区在线观看| 最新国产成人在线观看| 亚洲综合一区二区三区| 亚洲成人免费在线观看| 毛片av中文字幕一区二区| 国产一区二区女| 成人成人成人在线视频| 在线亚洲精品福利网址导航| 欧美日韩一区二区三区四区| 日韩一区国产二区欧美三区| 国产日韩欧美综合在线| 亚洲欧美日韩人成在线播放| 亚洲小说春色综合另类电影| 蜜桃精品视频在线| 成人黄色777网| 欧美写真视频网站| 日韩欧美你懂的| 国产精品色噜噜| 天堂午夜影视日韩欧美一区二区| 久久99精品久久久久久动态图| 国产成人免费视频网站| 欧日韩精品视频| 欧美精品一区二区三区久久久| 亚洲欧美综合网| 麻豆精品一区二区综合av| 波多野结衣中文字幕一区 | 久久精品亚洲乱码伦伦中文| 成人欧美一区二区三区白人| 五月婷婷激情综合网| 国产成人av电影免费在线观看| 色婷婷综合视频在线观看| 欧美成人精品1314www| 亚洲美女视频在线| 国产在线精品一区二区三区不卡| 色婷婷久久久亚洲一区二区三区 | 国产精一品亚洲二区在线视频| 91麻豆成人久久精品二区三区| 欧美不卡一二三| 亚洲国产综合色| 99视频一区二区| 久久久久久久综合日本| 日韩和欧美一区二区| 99久久精品久久久久久清纯| 日韩精品一区二区三区老鸭窝| 一区二区三区蜜桃网| av一区二区三区四区| 日韩精品专区在线影院观看| 亚洲h在线观看| 91亚洲国产成人精品一区二区三 | 亚洲成人1区2区| 色综合久久久久网| 中文字幕在线免费不卡| 国产999精品久久久久久| 精品久久人人做人人爽| 日韩专区中文字幕一区二区| 日本高清不卡aⅴ免费网站| 亚洲少妇中出一区| jizzjizzjizz欧美| 欧美激情综合五月色丁香小说| 久久国产欧美日韩精品| 欧美一二三四区在线| 日韩国产欧美三级| 7777精品久久久大香线蕉| 丝袜亚洲另类欧美| 欧美精品黑人性xxxx| 日韩黄色一级片| 欧美电视剧免费观看| 精品一区二区三区在线视频| 精品三级在线看| 激情综合亚洲精品| 精品久久久久久久久久久院品网 | 欧美亚洲动漫精品| 一区二区激情小说| 欧美日韩在线不卡| 性做久久久久久免费观看欧美| 在线视频国产一区| 三级久久三级久久久| 欧美一级精品大片| 国产老肥熟一区二区三区| 中文字幕乱码久久午夜不卡| 99久久99久久综合| 性欧美大战久久久久久久久| 欧美大片在线观看| 成人国产精品视频| 亚洲va国产天堂va久久en| 日韩久久免费av| jiyouzz国产精品久久| 亚洲综合久久av| 久久亚洲精精品中文字幕早川悠里| 国产一区二区精品在线观看| 综合久久久久综合| 在线播放中文字幕一区| 国产精品 日产精品 欧美精品| 亚洲精选免费视频| 日韩一区二区三区三四区视频在线观看 | 亚洲精品视频一区| 欧美一区二区三区喷汁尤物| 国产精品一区久久久久| 亚洲午夜视频在线观看| 精品粉嫩超白一线天av| 色又黄又爽网站www久久| 麻豆免费精品视频| 怡红院av一区二区三区| 日韩精品一区二区三区在线播放 | 亚洲国产日韩在线一区模特| 精品国产乱码91久久久久久网站| 99久久久精品| 久久国产欧美日韩精品| 亚洲综合色区另类av| 国产精品免费久久| 欧美一区国产二区| 一本在线高清不卡dvd| 国产专区综合网| 青青草97国产精品免费观看无弹窗版 | 欧美电影一区二区| a美女胸又www黄视频久久| 蜜臀av一区二区在线免费观看| 亚洲精品网站在线观看| 久久精品一级爱片| 日韩视频一区在线观看| 在线免费观看日韩欧美| av资源网一区| 国产.精品.日韩.另类.中文.在线.播放| 日日夜夜免费精品| 亚洲福利视频一区| 亚洲美女偷拍久久| 日韩一区有码在线| 国产精品不卡在线观看| 国产欧美一区二区精品婷婷| 91精品在线免费| 欧美日韩黄色一区二区| 色婷婷激情综合| 色天天综合久久久久综合片| 9i在线看片成人免费| 国产91精品欧美| 国产成人激情av| 国产精品18久久久久久久久久久久 | 成人免费av网站| 国产成人啪免费观看软件| 国产一区二区h| 国产白丝网站精品污在线入口| 国产精品中文字幕欧美| 国产精品1024| gogo大胆日本视频一区| 91麻豆免费在线观看| 色综合久久综合网97色综合| 91免费版pro下载短视频| 色成人在线视频| 欧美区一区二区三区| 欧美一卡二卡在线| 久久综合九色综合97婷婷| 日本一区免费视频| 国产精品久久久久7777按摩| 亚洲欧美在线视频观看| 亚洲国产综合91精品麻豆 | 日韩欧美国产一区在线观看| 精品少妇一区二区三区| 国产蜜臀97一区二区三区| 亚洲桃色在线一区| 视频一区二区三区中文字幕| 精品在线你懂的| 不卡的av在线| 欧美日韩精品一二三区| 久久久久久影视| 亚洲自拍偷拍图区| 免费观看一级欧美片| 国产福利精品一区二区| 欧美性色欧美a在线播放| 日韩亚洲电影在线| 国产精品美日韩| 日韩avvvv在线播放| 成人免费看片app下载| 欧美伊人久久大香线蕉综合69| 精品少妇一区二区三区免费观看| 国产精品理论片| 久久精品国产99国产精品| 91网站视频在线观看| 日韩欧美电影一二三| 亚洲美女视频在线| 国产一区二区影院| 欧美伊人久久久久久久久影院| 久久久久久黄色| 日韩精品一二区| 成年人网站91| 久久久久久免费网| 香蕉久久夜色精品国产使用方法 | 91国在线观看| 国产欧美一区二区精品性色超碰| 香蕉久久夜色精品国产使用方法 |