我正在学usb编程不知道什么是句柄,我看书老是遇到有
HANDLE hOut = INVALID_HANDLE_VALUE hin=IOCTL_WRITE_REGISTERS
是什么意思
还有下面这些函数是什么功能啊?希望高手指点
DeviceIoControl
SetupDiGetInterfaceDeviceDetail  
SetupDiGetClassDevs
SetupDiEnumDeviceInterfaces
非常感谢

解决方案 »

  1.   

    看看MSDN中的解释:
    handle 
    1. A pointer to a pointer; that is, a variable that contains the address of another variable, which in turn contains the address of the desired object. In certain operating systems, the handle points to a pointer stored in a fixed location in memory, whereas that pointer points to a movable block. If applications start from the handle whenever they access the block, the operating system can perform memory management tasks such as garbage collection without affecting the applications. 2. Any token that an application can use to identify and access an object such as a device, a file, a window, or a dialog box.3. One of several small squares displayed around a graphical object in a drawing application. The user can move or reshape the object by clicking on a handle and dragging.
      

  2.   

    在windows编程中,句柄仅是一个应用程序用来识别某些事情的数字,,就是一个整数,,
      

  3.   

    句柄你慢慢理解吧,他类似对象指针,是一个对象实例的唯一标示,代表着这个对象,通过句柄就可以引用对象了DeviceIoControl这个查MSDN吧,很详细,我记得我给你说过吧SetupDiGetInterfaceDeviceDetail  
    SetupDiGetClassDevs
    SetupDiEnumDeviceInterfaces
    这3个函数是设备管理函数,在MSDN上专门有介绍
      

  4.   

    作者:贾旭滨 来自:重庆大学光电工程学院
     
    句柄概念在WINDOWS编程中是一个很重要的概念,在许多地方都扮演着重要的角色。但由此而产生的句柄概念也大同小异,比如:
    <<Microsoft Windows 3 Developer's Workshop>>(Microsoft Press,by Richard Wilton)一书中句柄的概念是:在Windows环境中,句柄是用来标识项目的,这些项目包括:
    *.模块(module)
    *.任务(task)
    *.实例(instance)
    *.文件(file)
    *.内存块(block of memory)
    *.菜单(menu)
    *.控制(control)
    *.字体(font)
    *.资源(resource),包括图标(icon),光标(cursor),字符串(string)等
    *.GDI对象(GDI object),包括位图(bitmap),画刷(brush),元文件(metafile),调色板(palette),画笔(pen),区域(region),以及设备描述表(device context)。WINDOWS程序中并不是用物理地址来标识一个内存块,文件,任务或动态装入模块的,相反的,WINDOWS API给这些项目分配确定的句柄,并将句柄返回给应用程序,然后通过句柄来进行操作。在<<WINDOWS编程短平快>>(南京大学出版社)一书中是这么说的:句柄是WONDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等。WINDOWS句柄有点象C语言中的文件句柄。从上面的2个定义中的我们可以看到,句柄是一个标识符,是拿来标识对象或者项目的,它就象我们的姓名一样,每个人都会有一个,不同的人的姓名不一样,但是,也可能有一个名字和你一样的人。从数据类型上来看它只是一个16位的无符号整数。应用程序几乎总是通过调用一个WINDOWS函数来获得一个句柄,之后其他的WINDOWS函数就可以使用该句柄,以引用相应的对象。在WINDOWS编程中会用到大量的句柄,比如:HINSTANCE(实例句柄),HBITMAP(位图句柄),HDC(设备描述表句柄),HICON(图标句柄)等等,这当中还有一个通用的句柄,就是HANDLE,比如下面的语句:HINSTANCE hInstance;可以改成:HANDLE hInstance;上面的2句语句都是对的。一个WINDOWS应用程序可以用不同的方法获得一个特定项的句柄。许多API函数,诸如CreateWindow,GlobalAlloc,OpenFile的返回值都是一个句柄值。另外,WINDOWS也能通过应用程序的引出函数将一个句柄作为参数传送给应用程序,应用程序一旦获得了一个确定项的句柄,便可在WINDOWS环境下的任何地方对这个句柄进行操作。其实句柄的大量使用已经影响到了每一个WINDOWS的程序设计。句柄只有当唯一的确定了一个项目的时候,它才开始有意义。句柄对应着项目表中的一项,而只有WINDOWS本身才能直接存取这个表,应用程序只能通过API函数来处理不同的句柄,举个例子来说吧!比如:我们可以为我们的应用程序申请一块内存块,通过调用API函数GlobalAlloc,来返回一个句柄值:hMem=GlobalAlloc(......);其实现在hMem的值只是一个索引值,不是物理地址,应用程序还不能直接存取这块内存。这儿还有一个话外题,就是,一般情况下我们在编程的时候,给应用程序分配的内存都是可以移动的或者是可以丢弃的,这样能使有限的内存资源充分利用,所以,在某一个时候我们分配的那块内存的地址是不确定的,因为他是可以移动的,所以得先锁定那块内存块,这儿应用程序需要调用API函数GlobalLock函数来锁定句柄。如下:lpMem=GlobalLock(hMem);这样应用程序才能存取这块内存。
     
      

  5.   

    句柄是一种指向指针的指针。我们知 道,所谓指针是一种内存地址。应用程序启动后 ,组成这 个程序的各对象是住留在内存的。如果简单地理解,似乎我们只要获知这个内存的首地 址, 那么就可以随时用这个地址 访问对象。但是,如果您真的这样认为,那么您就大错特错 了。 我们知道,Windows是一 个以虚拟内存为基础的操作系统。在这种系统环境下,Window s内存 管理器经常在内存中来回移动对象,依此来满足各种应用程序的内存需要。对象被移动 意味着 它的地址变化 了。如果地址总是如此变化,我们该到哪里去找该对象呢? 为了解决这个问题,Windows操作系统为各应用程序腾出一些内存储地址, 用来专门 登记各应用对象在内存中的地址变化,而这个地址(存储单元的位置)本身是不 变的。 Windows内存管理器在移动对象在内存中的位置后,把对象新的地址告知这个句柄地址来 保存。 这样我们只需记住这个句柄地址就可以间接地知道对象具体在内存中的哪个位置。 这个地址是在对象装载(Load)时由系统分配给的,当系统卸载时(Unload)又释放给系统  。 句柄地址(稳定)→记载着对象在内存中的地址────→对象在内存中的地址(不稳定)  →实际对象 但是,必须注意的是程序每次从新启动,系统不能保证分配给这个程序的句柄还是原来 的那个句柄, 而且绝大多数情况的确不一样的。假如我们把进入电影院看电影看成 是一个应用程序的 启动运行, 那么系统给应用程序分配的句柄总是不一样,这和每次电 影院售给我们的门票总是不同 的一个座位 是一样的道理。 
      

  6.   

    句柄是Windows编程的一个关键性的概念。所谓句柄,就是一个唯一的数,
    用以标识许多不同的对象类型,如窗口、菜单、内存、画笔、画刷等。在Win32里,
    句柄是指向一个“无类型对象”(void*)的指针,也就是一个4字节长的数据。
    无论它的本质是什么,句柄并不是一个真正
    意义上的指针。从构造上看,句柄是一个指针,尽管它没有指向用于存储某个对象
    的内存位置。事实上,句柄指向一个包含了对该对象进行的引用的位置。句柄的
    声明是这样的:typedef void* HANDLE 由于Windows是一个多任务操作系统,
    它可以同时运行多个程序或一个程序的多个副本。这些运行的程序称为一个实例。
    为了对同一程序的多个副本进行管理,Windows引入了实例句柄。Windows为每个应
    用程序建立一张表,实例句柄就好象是这张表的一个索引。Windows不仅使用句柄来
    管理实例,也用它来管理窗口、位图、字体、元文件、图标等系统资源。