How to Use WinUSB to Communicate with a USB Device
|
|
|
- Virgil Chapman
- 10 years ago
- Views:
Transcription
1 How to Use WinUSB to Communicate with a USB Device Abstract Independent hardware vendors (IHVs) who manufacture USB devices must often provide a way for applications to access the device s features. Historically, this has meant using the Windows Driver Model (WDM) to implement a function driver for the device and installing the driver in the device stack above system supplied protocol drivers. The Windows Driver Foundation (WDF) is now the preferred model for USB drivers. It provides IHVs with three options for providing access to a USB device: Implementing a user mode driver by using the WDF user mode driver framework (UMDF). Implementing a kernel mode driver by using the WDF kernel mode driver framework (KMDF). Installing WinUsb.sys as the device s function driver and providing an application that accesses the device by using the WinUSB API. This white paper provides guidelines for when to use each option and includes a detailed walkthrough of how to install WinUsb.sys as a device s function driver and use the WinUSB API to communicate with the device. This information applies for the following operating systems: Windows 7 Windows Server 2008 Windows Vista Windows XP References and resources discussed here are listed at the end of this paper. For the latest information, see:
2 How to Use WinUSB to Communicate with a USB Device 2 Disclaimer: This is a preliminary document and may be changed substantially prior to final commercial release of the software described herein. The information contained in this document represents the current view of Microsoft Corporation on the issues discussed as of the date of publication. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information presented after the date of publication. This White Paper is for informational purposes only. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS DOCUMENT. Complying with all applicable copyright laws is the responsibility of the user. Without limiting the rights under copyright, no part of this document may be reproduced, stored in or introduced into a retrieval system, or transmitted in any form or by any means (electronic, mechanical, photocopying, recording, or otherwise), or for any purpose, without the express written permission of Microsoft Corporation. Microsoft may have patents, patent applications, trademarks, copyrights, or other intellectual property rights covering subject matter in this document. Except as expressly provided in any written license agreement from Microsoft, the furnishing of this document does not give you any license to these patents, trademarks, copyrights, or other intellectual property. Unless otherwise noted, the example companies, organizations, products, domain names, addresses, logos, people, places and events depicted herein are fictitious, and no association with any real company, organization, product, domain name, address, logo, person, place or event is intended or should be inferred. Microsoft, MSDN, Windows, Windows Server, and Windows Vista are either registered trademarks or trademarks of Microsoft Corporation in the United States and/or other countries. The names of actual companies and products mentioned herein may be the trademarks of their respective owners. Revision History Date December 6, 2007 August 30, 2007 Change Added additional information for communicating with endpoints. Added a section on DFU to the WinUSB FAQ. Removed the note from Table 1 indicating that WinUSB does not support WinUSB selective suspend on Windows XP. Created
3 How to Use WinUSB to Communicate with a USB Device 3 Contents Introduction... 4 Summary of WinUSB, UMDF, and KMDF Capabilities... 5 Guidelines for Providing Access to USB Devices... 6 Introduction to WinUSB... 6 WinUSB FAQ... 7 How to Install WinUsb.sys as a Function Driver... 8 How to Use the WinUSB API Obtain a Handle to the Device and Initialize WinUSB Obtain the Device Path Obtain a File Handle for the Device Initialize WinUSB Configure the Device Communicate with Endpoints Control Requests WinUSB I/O Requests WinUSB Write Requests Default WinUSB Write Behavior WinUSB Read Requests Default WinUSB Read Behavior Pipe Policies WinUSB Power Management Selective Suspend Detecting Idle Future Feature Considerations Summary Resources... 24
4 How to Use WinUSB to Communicate with a USB Device 4 Introduction Independent hardware vendors (IHVs) who manufacture USB devices must typically provide a way for applications to access the device s features. Historically, this has meant using the Windows Driver Model (WDM) to implement a function driver for the device and installing the driver in the device stack above system supplied protocol drivers such as Usbhub.sys or Usbccgp.sys. The function driver exposes a device interface that applications use to obtain the device s file handle. They can then use the handle to communicate with the driver by calling Windows API functions such as ReadFile and DeviceIoControl. Drivers are the most flexible way to provide access to a USB device and allow the device to be accessed by any application, including multiple concurrent applications. However, drivers require a significant development effort, and some devices are simple enough that they do not require the full support of a custom function driver. For example, devices such as machine controllers or data loggers are typically accessed only by a single application that was written specifically for the associated device. In these cases, WinUSB provides a simpler alternative to implementing a custom USB driver. WinUSB was developed concurrently with the Windows Driver Foundation (WDF) and is available for Windows XP and later versions of Windows. It includes a kernel mode driver, WinUsb.sys, which is an integral part of WDF user mode driver framework (UMDF) support for USB drivers. However, for USB devices that are accessed by only a single application, vendors can often install WinUsb.sys as their device s function driver instead of implementing a custom driver. The application can then configure the device and access its endpoints by using the WinUSB API. For those USB devices that require the features of a custom function driver, the preferred approach is WDF. The WDF programming model and device driver interface (DDI) makes WDF USB drivers much easier to implement than equivalent WDM drivers. You can implement WDF USB drivers in either of the following ways: Use the user mode driver framework (UMDF) to implement user mode USB drivers for most USB devices for Windows XP and later. Use the kernel mode driver framework (KMDF) to implement kernel mode USB drivers for any USB device for Windows 2000 and later. This white paper describes how to choose the best way to provide applications with access to a USB device and answers some common questions about WinUSB. The bulk of the paper is a detailed walkthrough including code samples of how to install WinUsb.sys as a USB device s function driver and how to use the WinUSB API to communicate with the device from an application.
5 How to Use WinUSB to Communicate with a USB Device 5 The examples in this paper are based on the OSR USB FX2 Learning Kit device, but you can easily extend the procedures to other USB devices. Figure 1 is a simplified diagram of the FX2 device and shows its key features. Remote Wakeup Switch Toggle Switches USB Chip LED Panel Light Bar USB Socket Figure 1. OSR USB FX2 Learning Kit device Summary of WinUSB, UMDF, and KMDF Capabilities Table 1 summarizes the capabilities of WinUSB, UMDF USB drivers, and KMDF USB drivers. Table 1. WDF USB Feature Support Requirements WinUSB UMDF KMDF Supports multiple concurrent applications. No Yes Yes Isolates driver address space from application address space. No Yes No Supports bulk, interrupt, and control transfers. Yes Yes Yes Supports isochronous transfers. No No Yes Supports the installation of kernel mode drivers such as filter drivers above the USB driver. No No Yes Supports selective suspend and wait/wake Yes Yes Yes Table 2 summarizes which WDF options are supported by different versions of Windows. Table 2. WDF USB Windows Support Requirements WinUSB UMDF KMDF Windows Vista and later Yes 1 Yes 1 Yes Windows Server 2003 No No Yes Windows XP Yes 2 Yes 2 Yes Windows 2000 No No Yes 3 Notes: 1 WinUSB and UMDF are supported only on x86 and x64 versions of Windows. 2 WINUSB and UMDF are supported on Windows XP with service pack 2 or later. 3 KMDF is supported on Windows 2000 with Service Pack 4 or later.
6 How to Use WinUSB to Communicate with a USB Device 6 Guidelines for Providing Access to USB Devices Generally, start with the simplest approach, WinUSB, and move to more complex solutions only if it is necessary. If your device does not support isochronous transfers and is accessed by only a single application, the application can use WinUSB to configure the device and access its endpoints. For example, WinUSB is the preferred approach to use for an electronic weather station that is accessed only by an application that is packaged with the device. WinUSB is also useful for diagnostic communication with a device and for flashing firmware. Some types of devices require a custom function driver. For example, you must implement a driver for devices that are accessed by multiple concurrent applications. The general guidelines for implementing WDF USB drivers are as follows: UMDF is the preferred approach and is suitable for most USB devices. For example, UMDF drivers are the preferred option for music players or serial dongles. Devices with features that are not supported by UMDF or that must run on versions of Windows earlier than Windows XP require a KMDF driver. For example, a USB network adapter requires a KMDF driver because the driver s upper edge must communicate with the kernel mode network interface device standard (NDIS) stack. Such communication can be done only from kernel mode. KMDF drivers are also required for devices that support isochronous transfers. For a detailed discussion about how to implement UMDF and KMDF drivers, see the Microsoft Press book Developing Drivers with the Windows Driver Foundation or the WHDC Windows Driver Foundation Web page. The rest of this white paper is devoted to WinUSB. Introduction to WinUSB WinUSB consists of two primary components: WinUsb.sys is a kernel mode driver that can be installed as either a filter or function driver, above the protocol drivers in a USB device s kernel mode device stack. WinUsb.dll is a user mode DLL that exposes the WinUSB API. Applications can use this API to communicate with WinUsb.sys when it is installed as a device s function driver. For devices that do not require a custom function driver, WinUsb.sys can be installed in the device s kernel mode stack as the function driver. User mode processes can then communicate with WinUsb.sys through a set of device I/O control requests. The WinUSB API exposed by WinUSB.dll simplifies this communication process. Instead of constructing device I/O control requests to perform standard USB operations such as configuring the device, sending control requests, and transferring data to or from the device applications call equivalent WinUSB API functions. Internally, WinUsb.dll uses the data that the application passes to the WinUSB function to construct the appropriate device I/O control request and sends
7 How to Use WinUSB to Communicate with a USB Device 7 the request to WinUsb.sys for processing. When the request is complete, the WinUSB function passes any information returned by WinUsb.sys such as data from a read request back to the calling process. Using the WinUSB API to communicate with a device is much simpler than implementing a driver but has the following corresponding limitations: The WinUSB API lets only one application at a time communicate with the device. If more than one application must be able to communicate concurrently with a device, you must implement a function driver. The WinUSB API does not support streaming data to or from isochronous endpoints. Isochronous transfers require a kernel mode function driver. The WinUSB API does not support devices that already have kernel mode support. Examples of such devices include modems and network adaptors, which are supported by the telephony API (TAPI) and NDIS, respectively. For multifunction devices, you can use the device s INF to specify either an in box kernel mode driver or WinUsb.sys for each USB function separately. However, you can specify only one of these options for a particular function, not both. WinUsb.sys is also a key part of the link between a UMDF function driver and the associated device. WinUsb.sys is installed in the device s kernel mode stack as an upper filter driver. An application communicates with the device s UMDF function driver to issue read, write, or device I/O control requests. The driver interacts with the framework, which passes the request to WinUsb.sys, which processes the request and passes it to the protocol drivers and ultimately to the device. Any response returns by the reverse path. WinUsb.sys also serves as the device stack s Plug and Play and power owner (PPO). WinUSB FAQ This FAQ answers several common questions about WinUSB. Which versions of Windows support WinUSB? WinUSB is supported by: All Windows Vista SKUs. All client SKUs of the 32 bit versions of Windows XP SP2 and later service packs. Note: WinUSB is not native to Windows XP; it must be installed with the WinUSB co installer. For details, see How to Install WinUsb.sys as a Function Driver later in this paper.
8 How to Use WinUSB to Communicate with a USB Device 8 Which USB features are supported by WinUSB? Table 3 shows which high level USB features are supported by WinUSB in Windows Vista and Windows XP. Table 3. WinUSB Feature Support Feature Windows XP Windows Vista Device I/O control requests Supported Supported Isochronous transfers Not supported Not supported Bulk, control, and interrupt transfers Supported Supported Selective suspend Supported Supported Remote wake Supported Supported How do I get permission to redistribute WinUSB? WinUSB is included in the Windows Driver Kit (WDK) in the form of a co installer package, WinUSBCoInstaller.dll. Separate DLLs for x86 and x64 systems are located under the WinDDK\BuildNumber\Redist\Winusb folder. These DLLs are signed. IHVs can redistribute these DLLs. Does WinUSB support the DFU profile for USB devices? Microsoft has not implemented a specific driver for firmware updates. WinUSB does not support host initiated reset port and cycle port operations. However, some devices expose a vendor defined control code for initiating a reset. In that case, you can use WinUSB to initiate a reset by sending a control transfer request that contains the vendor defined control code to the device. For a discussion of how to use WinUSB to send control transfer requests, see Control Requests later in this paper. How do I report WinUSB bugs or make feature requests? To report bugs or make feature requests, use to contact your Microsoft Technical Account Manager or Product Support Engineer. How to Install WinUsb.sys as a Function Driver Before your application can use the WinUSB API to communicate with a device, you must install WinUsb.sys as the device s function driver. To do so, create a package that includes the following: The WinUSB co installer, which installs WinUSB on the target system, if necessary. The WDK includes three versions of the co installer: one for x86 systems, one for x64 systems, and one for Itanium systems. They are all named WinUSBCoInstaller.dll and are located in the appropriate subdirectory of the WinDDK\BuildNumber\redist\winusb folder. The KMDF co installer, which installs the correct version of KMDF on the target system, if necessary. This co installer is required because WinUsb.sys depends on KMDF. The version of WinUSB on which this paper is based depends on KMDF version 1.5, and the associated co installer is WdfCoInstaller01005.dll. The x86 and x64 versions of WdfCoInstaller01005.dll are included with the WDK under the WinDDK\BuildNumber\redist\wdf folder.
9 How to Use WinUSB to Communicate with a USB Device 9 An INF that installs WinUsb.sys as the device s function driver. A signed catalog file for the package. This file is required to install WinUSB on x64 versions of Windows Vista. For more information on how to create and test signed catalog files, see Kernel Mode Code Signing Walkthrough on the WHDC Web site. Note: As new WDF versions are released, the co installer names will change to reflect the WDF version number. For example WDF version 1.7 is currently under development, and the KMDF co installer for that version is named WdfCoInstaller01007.dll. The following example is a simple INF that installs WinUsb.sys as the function driver for the Fx2 device: [Version] Signature = "$Windows NT$" Class = MyDeviceClass ClassGuid=78A1C d3-B88D-00C04FAD5171 Provider = %ProviderName% CatalogFile=MyCatFile.cat ; ================== Class section ================== [ClassInstall32] Addreg=MyDeviceClassReg [MyDeviceClassReg] HKR,,,0,%ClassName% HKR,,Icon,,-1 ; ========== Manufacturer/Models sections =========== [Manufacturer] %ProviderName% = MyDevice_WinUSB,NTx86,NTamd64,NTia64 [MyDevice_WinUSB.NTx86] %USB\MyDevice.DeviceDesc% =USB_Install, USB\VID_0547&PID_1002 [MyDevice_WinUSB.NTamd64] %USB\MyDevice.DeviceDesc% =USB_Install, USB\VID_0547&PID_1002 [MyDevice_WinUSB.NTia64] %USB\MyDevice.DeviceDesc% =USB_Install, USB\VID_0547&PID_1002 ; =================== Installation =================== ;[1] [USB_Install] Include=winusb.inf Needs=WINUSB.NT ;[2] [USB_Install.Services] Include=winusb.inf AddService=WinUSB,0x ,WinUSB_ServiceInstall ;[3] [WinUSB_ServiceInstall] DisplayName = %WinUSB_SvcDesc% ServiceType = 1 StartType = 3 ErrorControl = 1 ServiceBinary = %12%\WinUSB.sys ;[4] [USB_Install.Wdf] KmdfService=WINUSB, WinUsb_Install
10 How to Use WinUSB to Communicate with a USB Device 10 [WinUSB_Install] KmdfLibraryVersion=1.5 ;[5] [USB_Install.HW] AddReg=Dev_AddReg [Dev_AddReg] HKR,,DeviceInterfaceGUIDs,0x10000,"b35924d6-3e16-4a9e a4b79bac" ;[6] [USB_Install.CoInstallers] AddReg=CoInstallers_AddReg CopyFiles=CoInstallers_CopyFiles [CoInstallers_AddReg] HKR,,CoInstallers32,0x ,"WdfCoInstaller01005.dll,WdfCoInstaller ","WinUSBCoInstaller.dll" [CoInstallers_CopyFiles] WinUSBCoInstaller.dll WdfCoInstaller01005.dll [DestinationDirs] CoInstallers_CopyFiles=11 ; ================= Source Media Section ===================== ;[7] [SourceDisksNames] 1 = %DISK_NAME%,,,\i386 2 = %DISK_NAME%,,,\amd64 3 = %DISK_NAME%,,,\ia64 [SourceDisksFiles.x86] WinUSBCoInstaller.dll=1 WdfCoInstaller01005.dll=1 [SourceDisksFiles.NTamd64] WinUSBCoInstaller.dll=2 WdfCoInstaller01005.dll=2 [SourceDisksFiles.ia64] WinUSBCoInstaller.dll=3 WdfCoInstaller01005.dll=3 ; =================== Strings =================== [Strings] ProviderName="MyWinUsbTest" USB\MyDevice.DeviceDesc="Test using WinUSB only" WinUSB_SvcDesc="WinUSB Test" DISK_NAME="My Install Disk" ClassName="MyDeviceClass" This INF can be used for most USB devices, with some straightforward modifications. Generally, you should change USB_Install in section names to an appropriate DDInstall value. You should also make straightforward changes to the version, manufacturer, and model sections, such as providing an appropriate manufacture s name, the name of your signed catalog file, the correct device class, and the vendor identifier (VID) and product identifier (PID) for the device. The device specific values that should be changed are shown in the example in bold. Values that might need to be changed, such as those that depend on version number, are in italic. Note: For more information on USB device classes, see Supported USB Classes in the WDK.
11 How to Use WinUSB to Communicate with a USB Device 11 Apart from device specific values and several issues that are noted in the following list, you can use these sections and directives without modification to install WinUSB for any USB device. The following notes correspond to the numbered comments in the INF. 1. The Include and Needs directives in the USB_Install section are required for installing WinUSB on Windows Vista systems. Windows XP systems ignore these directives. These directives should not be modified. 2. The Include directive in the USB_Install.Services section includes the systemsupplied INF for WinUSB. This INF is installed by the WinUSB co installer if it is not already on the target system. The AddService directive specifies WinUsb.sys as the device s function driver. These directives should not be modified. 3. The WinUSB_ServiceInstall section contains the data for installing WinUsb.sys as a service. This section should not be modified. 4. The KmdfService directive in the USB_Install.Wdf section installs WinUsb.sys as a kernel mode service. The referenced WinUSB_Install section specifies the KMDF library version. This example is based on the Windows Vista version of the WDK (build 6000), which includes KMDF version 1.5. Later versions of WinUSB might require a later KMDF version. 5. USB_Install.HW is the key section in the INF. It specifies the device interface globally unique identifier (GUID) for your device. The AddReg directive puts the interface GUID in a standard registry value. When WinUsb.sys is loaded as the device s function driver, it reads the registry value and uses the specified GUID to represent the device interface. You should replace the GUID in this example with one that you create specifically for your device. If the protocols for the device change, you should create a new device interface GUID. 6. The USB_Install.CoInstallers section, including the referenced AddReg and CopyFiles sections, contains data and instructions to install the WinUSB and KMDF co installers and associate them with the device. Most USB devices can use these sections and directives without modification. 7. The x86 and x64 versions of Windows have separate co installers. This example stores them on the installation disk in folders that are named i386 and amd64, respectively. Figure 2 (on the following page) shows an example of what an IHV s driver package might contain. Note: Each co installer has free and checked versions. Use the free version to install WinUSB on free builds of Windows, including all retail versions. Use the checked version which has the _chk suffix to install WinUSB on checked builds of Windows. The INF typically also contains directives to install the associated application. You install WinUsb.sys exactly like any other driver. The simplest approach is to plug in the device and use the Add New Hardware Wizard or Device Manager to install the driver by using the INF that is discussed in this section. For more details on INFs and how to install device drivers, see Device and Driver Installation in the WDK.
12 How to Use WinUSB to Communicate with a USB Device 12 Figure 2. Example driver package contents How to Use the WinUSB API If a USB device has WinUsb.sys as its function driver, the associated application communicates with the device by calling various WinUSB API functions. To use the WinUSB API in an application: Include WinUsb.h. It is included with the WDK, under WINDDK\BuildNumber\inc\ddk. Add WinUsb.lib to the list of libraries that are linked to your application. WinUsb.lib is included with the WDK. The version for Windows XP is located under WINDDK\BuildNumber\lib\wxp\i386. There are separate versions of WinUsb.lib for Windows Vista for each supported CPU architecture. They are located under the WINDDK\BuildNumber\lib\wlh folder. Include Usb100.h, which is also under WINDDK\BuildNumber\inc\ddk. This header is not required, but it contains declarations for some useful macros. To access the device, an application must: 1. Use the device interface GUID to obtain a handle to the device. 2. Use the handle to initialize WinUSB. 3. Use the WinUSB API to configure the device. 4. Use the WinUSB API to communicate with the endpoints. This section shows how to perform these key tasks, based on a simple application that accesses the Fx2 device. Obtain a Handle to the Device and Initialize WinUSB To use the WinUSB API, you must first obtain a file handle for the device and use that handle to initialize WinUSB. The first two steps of the procedure are similar to those steps that are used to obtain a file handle for any device: 1. Use the device interface GUID to obtain the device path. The correct GUID is the one that you specified in the INF that was used to install WinUsb.sys. 2. Use the device path from step 1 to obtain a file handle for the device.
13 How to Use WinUSB to Communicate with a USB Device Pass the file handle to WinUsb_Initialize to initialize WinUSB and obtain a WinUSB handle. You use the device s WinUSB handle to identify the device when you call WinUSB API functions, not the device s file handle. Obtain the Device Path The application s GetDevicePath function, which is shown in the following example, uses the device interface GUID to obtain the device path. It is similar to the Setup API code that is used for most devices, but is included here for completeness. For more information, see Setup API on MSDN. Note that some code mostly routine errorhandling code has been omitted for clarity: BOOL GetDevicePath(LPGUID InterfaceGuid, PCHAR DevicePath, size_t BufLen) BOOL bresult = FALSE; HDEVINFO deviceinfo; SP_DEVICE_INTERFACE_DATA interfacedata; PSP_DEVICE_INTERFACE_DETAIL_DATA detaildata = NULL; ULONG length; ULONG requiredlength=0; HRESULT hr; // [1] deviceinfo = SetupDiGetClassDevs(InterfaceGuid, NULL, NULL, DIGCF_PRESENT DIGCF_DEVICEINTERFACE);...//Error handling code omitted. // [2] interfacedata.cbsize = sizeof(sp_device_interface_data); bresult = SetupDiEnumDeviceInterfaces(deviceInfo, NULL, InterfaceGuid, 0, &interfacedata);...//error handling code omitted. // [3] SetupDiGetDeviceInterfaceDetail(deviceInfo, &interfacedata, NULL, 0, &requiredlength, NULL); detaildata = (PSP_DEVICE_INTERFACE_DETAIL_DATA) LocalAlloc(LMEM_FIXED, requiredlength); if(null == detaildata) SetupDiDestroyDeviceInfoList(deviceInfo); return FALSE; detaildata->cbsize = sizeof(sp_device_interface_detail_data); length = requiredlength; bresult = SetupDiGetDeviceInterfaceDetail(deviceInfo, &interfacedata, detaildata, length, &requiredlength, NULL);
14 How to Use WinUSB to Communicate with a USB Device 14 if(false == bresult) LocalFree(detailData); return FALSE; // [4] hr = StringCchCopy(DevicePath, BufLen, detaildata->devicepath); if(failed(hr)) SetupDiDestroyDeviceInfoList(deviceInfo); LocalFree(detailData); LocalFree(detailData); return bresult; The basic procedure is as follows: 1. Get a handle to the device information set by passing the device interface GUID that you defined in the INF to SetupDiGetClassDevs. The function returns an HDEVINFO handle. 2. Call SetupDiEnumDeviceInterfaces to enumerate the system s device interfaces and obtain information on your device interface. To do so: Initialize a SP_DEVICE_INTERFACE_DATA structure by setting its cbsize member to the size of the structure. Pass the HDEVINFO handle from step 1, the device interface GUID, and a reference to the initialized SP_DEVICE_INTERFACE_DATA structure to SetupDiEnumDeviceInterfaces. When the function returns, the SP_DEVICE_INTERFACE_DATA structure contains basic data for the interface. 3. Call SetupDiGetDeviceInterfaceDetail to get detailed data for the device interface. The information is returned in a SP_DEVICE_INTERFACE_DETAIL_DATA structure. Because the size of the SP_DEVICE_INTERFACE_DETAIL_DATA structure varies, you must first obtain the correct buffer size by calling SetupDiGetDeviceInterfaceDetail with the DeviceInterfaceDetailData parameter set to NULL. The function returns the correct buffer size in the requiredlength parameter. Use that value to correctly allocate memory for a SP_DEVICE_INTERFACE_DETAIL_DATA structure. Call SetupDiGetDeviceInterfaceDetail again and pass it a reference to the initialized structure. When the function returns, the structure contains detailed information about the interface. 4. The device path is in the SP_DEVICE_INTERFACE_DETAIL_DATA structure s DevicePath member.
15 How to Use WinUSB to Communicate with a USB Device 15 Obtain a File Handle for the Device The application s OpenDevice function, which is shown in the following example, obtains a file handle for the device by passing the device path to CreateFile. 1. Call the GetDevicePath utility function to obtain the device path. GetDevicePath was discussed in the previous section. 2. Pass the device path to CreateFile to obtain a file handle for the device. This example obtains a file handle that supports synchronous read and write access to the device. For details on how to open a file handle for asynchronous I/O, see the CreateFile Function reference page on MSDN. Be sure to set the FILE_FLAG_OVERLAPPED flag. WinUSB depends on this setting: HANDLE OpenDevice(BOOL bsync) HANDLE hdev = NULL; char devicepath[max_devpath_length]; BOOL retval; retval = GetDevicePath( (LPGUID) &GUID_DEVINTERFACE_OSRUSBFX2, devicepath, sizeof(devicename));...//error-handling code omitted. hdev = CreateFile(devicePath, GENERIC_WRITE GENERIC_READ, FILE_SHARE_WRITE FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL FILE_FLAG_OVERLAPPED, NULL);...//Error-handling code omitted. return hdev; Initialize WinUSB The handle that was obtained in the preceding section is the file handle for the device. However, the WinUSB API uses a WinUSB handle to identify the target device instead of the file handle. To obtain a WinUSB handle, initialize WinUSB by passing the file handle to WinUsb_Initialize. This function returns the WinUSB handle for the device. The following example initializes WinUSB with the file handle that the OpenDevice utility function obtained, as discussed in the preceding section. It then stores the corresponding WinUSB handle for later use in a privately defined global structure: devicehandle = OpenDevice(TRUE); bresult = WinUsb_Initialize(deviceHandle, &usbhandle); if(bresult) devinfo.winusbhandle = usbhandle; Configure the Device After an application initializes WinUSB, it must configure the USB device. The procedure is similar to the one that USB device drivers use. However, it is accomplished by calling WinUSB API functions instead of the WDF framework libraries or any of the Windows WDM USB client support routines.
16 How to Use WinUSB to Communicate with a USB Device 16 The application s InitializeDevice function, which is shown in the following example, configures the Fx2 device. It also includes the code shown in the preceding example to initialize WinUSB: BOOL Initialize_Device() BOOL bresult; WINUSB_INTERFACE_HANDLE usbhandle; USB_INTERFACE_DESCRIPTOR ifacedescriptor; WINUSB_PIPE_INFORMATION pipeinfo; UCHAR speed; ULONG length; devicehandle = OpenDevice(TRUE); bresult = WinUsb_Initialize(deviceHandle, &usbhandle); //[1] if(bresult) devinfo.winusbhandle = usbhandle; length = sizeof(uchar); bresult = WinUsb_QueryDeviceInformation(devInfo.winUSBHandle, DEVICE_SPEED, &length, &speed); //[2] if(bresult) devinfo.devicespeed = speed; bresult = WinUsb_QueryInterfaceSettings(devInfo.winUSBHandle, 0, &ifacedescriptor); if(bresult) for(int i=0;i<ifacedescriptor.bnumendpoints;i++) //[3] bresult = WinUsb_QueryPipe(devInfo.winUSBHandle, 0, (UCHAR) i, &pipeinfo); //[4] if(pipeinfo.pipetype == UsbdPipeTypeBulk && USB_ENDPOINT_DIRECTION_IN(pipeInfo.PipeId)) devinfo.bulkinpipe = pipeinfo.pipeid; else if(pipeinfo.pipetype == UsbdPipeTypeBulk && USB_ENDPOINT_DIRECTION_OUT(pipeInfo.PipeId)) devinfo.bulkoutpipe = pipeinfo.pipeid; else if(pipeinfo.pipetype == UsbdPipeTypeInterrupt) devinfo.interruptpipe = pipeinfo.pipeid; else bresult = FALSE; break; return bresult;
17 How to Use WinUSB to Communicate with a USB Device 17 The basic procedure is as follows: 1. If necessary, call WinUsb_QueryDeviceInformation to obtain the device s speed. The function returns one of three values: LowSpeed (0x01), FullSpeed (0x02), or HighSpeed (0x03). 2. Pass the device s interface handles to WinUsb_QueryInterfaceSettings to obtain the corresponding interface descriptors. The WinUSB handle corresponds to the first interface. Because the Fx2 device supports only one interface that has no alternative settings, the AlternateSettingNumber parameter is set to zero and the function is called only once. If the device supports multiple interfaces, call WinUsb_GetAssociatedInterface to obtain interface handles for associated interfaces. WinUsb_QueryInterfaceSettings returns a USB_INTERFACE_DESCRIPTOR structure that contains information about the interface. The structure contains, in particular, the number of endpoints in the interface. 3. To obtain information about each endpoint, call WinUsb_QueryPipe once for each endpoint on each interface. WinUsb_QueryPipe returns a WINUSB_PIPE_INFORMATION structure that contains information about the specified endpoint. The Fx2 device has one interface with three endpoints, so the function s AlternateInterfaceNumber parameter is set to 0 and the value of the PipeIndex parameter is varied from 0 to To determine the pipe type, examine the WINUSB_PIPE_INFORMATION structure s PipeInfo member. This member is set to one of the USBD_PIPE_TYPE enumeration values: UsbdPipeTypeControl, UsbdPipeTypeIsochronous, UsbdPipeTypeBulk, or UsbdPipeTypeInterrupt. The three endpoints that the Fx2 device supports are an interrupt pipe, a bulk in pipe, and a bulk out pipe, so PipeInfo will be set to either UsbdPipeTypeInterrupt or UsbdPipeTypeBulk. The UsbdPipeTypeBulk value identifies bulk pipes, but does not give the direction. That information is encoded in the high bit of the pipe address, which is stored in the WINUSB_PIPE_INFORMATION structure s PipeId member. The simplest way to determine direction is to pass the PipeId value to one of the following macros from Usb100.h: USB_ENDPOINT_DIRECTION_IN returns TRUE if the direction is in. USB_ENDPOINT_DIRECTION_OUT returns TRUE if the direction is out. The application uses the PipeId value to identify the desired pipe in calls to WinUSB functions such as WinUsb_ReadPipe, so the example stores all three PipeId values for later use. Communicate with Endpoints After you have PipeId values for the device s endpoints, you can communicate with the device. This paper discusses how to issue control, read, and write requests. Control Requests All USB devices have a control endpoint in addition to the endpoints that are associated with interfaces. The primary purpose of the control endpoint is to provide
18 How to Use WinUSB to Communicate with a USB Device 18 a default endpoint that applications can use to configure the device. However, devices can also use the control endpoint for device specific purposes. The Fx2 device uses the control endpoint to control the light bar and seven segment digital display. Control commands consist of an 8 byte setup packet which includes a request code that specifies the particular request and an optional data buffer. The request codes and buffer formats are vendor defined. To issue a control request: 1. Allocate a buffer, if necessary. 2. Construct a setup packet. 3. Call WinUsb_ControlTransfer to send the request and buffer to the control endpoint. The applications SetBar function, which is shown in the following example, sends a control request to the Fx2 device to control the lights on the light bar: BOOL SetBar(HWND hwnd) BOOL bresult; ULONG bytesreturned; WINUSB_SETUP_PACKET setuppacket; UCHAR lightedbars = 0; //[1] numbars = 8; for(int i = 0;i<numBars; i++) if((int) SendMessage(hwndSetBarCheckBox[i], BM_GETCHECK, 0,0)) lightedbars += 1 << (UCHAR) i; //[2] setuppacket.requesttype = 0; //Host to Device setuppacket.request = SET_BARGRAPH_DISPLAY; setuppacket.index = 0; setuppacket.length = sizeof(uchar); setuppacket.value = 0; //[3] bresult = WinUsb_ControlTransfer(devInfo.winUSBHandle, setuppacket, &lightedbars, sizeof(uchar), &bytesreturned, NULL); return bresult; The code to set the light bar is 0xD8, which is defined for convenience as SET_BARGRAPH_DISPLAY. The procedure for issuing the request is as follows: 1. Load the data into the buffer. The device requires a 1 byte data buffer that specifies which elements should be lit by setting the appropriate bits. The user interface (UI) for the application includes a set of eight CheckBox controls that are used to specify which elements of the light bar should be lit. The example queries the user interface to determine which lights should be lit and sets the appropriate bits in the buffer.
19 How to Use WinUSB to Communicate with a USB Device Construct a setup packet by assigning values to a WINUSB_SETUP_PACKET structure: The RequestType member specifies request direction. It is set to 0, which indicates host to device data transfer. For device to host transfers, set RequestType to 1. The Request member is set to the vendor defined code for this request, 0xD8. It is defined for convenience as SET_BARGRAPH_DISPLAY. The Length member is set to the size of the data buffer. The Index and Value members are not required for this request, so they are set to zero. 3. Transmit the request by passing the device s WinUSB handle, the setup packet, and the data buffer to WinUsb_ControlTransfer. The function returns the number of bytes that were transferred to the device. WinUSB I/O Requests The Fx2 device has bulk in and bulk out endpoints that can be used for read and write requests, respectively. These two endpoints are configured for loopback, so the device simply moves data from the bulk in endpoint to the bulk out endpoint. It does not change the value of the data or create any new data, so a read request reads the data that was sent by the most recent write request. WinUSB Write Requests WinUSB has separate functions for sending write and read requests: WinUsb_WritePipe and WinUsb_ReadPipe. The application s WriteToDevice function, which is shown in the following example, writes a simple string to the Fx2 device: BOOL WriteToDevice(HWND hwnd) USHORT bufsize = 12; UCHAR szbuffer[12]; BOOL bresult; ULONG byteswritten; //[1] SendMessage(hwndWriteEdit, EM_GETLINE, 0, (LPARAM) szbuffer); //[2] bresult = WinUsb_WritePipe(devInfo.winUSBHandle, devinfo.bulkoutpipe, szbuffer, 24, &byteswritten, NULL); return bresult; To send a write request: 1. Create a buffer and fill it with the data that you want to write to the device. The sample obtains a 12 character Unicode string from an Edit control on the application s UI. The application is responsible for managing the size of the buffer appropriately. As long as an application is not using RAW_IO, there is no limitation on buffer
20 How to Use WinUSB to Communicate with a USB Device 20 size. WinUSB divides the buffer into appropriately sized chunks, if necessary. For RAW_IO, the size of the buffer is limited by the controller. For read requests, the buffer must be a multiple of the maximum packet size. 2. Write the buffer to the device by calling WinUsb_WritePipe. Pass the interface handle, the PipeId value for the bulk out pipe, and the buffer. In this case, the interface handle is the WinUSB handle. The function returns the number of bytes that are actually written to the device in the byteswritten parameter. The final parameter of WinUsb_WritePipe, Overlapped, is set to NULL to request a synchronous operation. To perform an asynchronous write, Overlapped should be a pointer to an OVERLAPPED structure. Default WinUSB Write Behavior Zero length writes are forwarded down the stack. If the transfer length is greater than a maximum transfer length, WinUSB divides the request into smaller requests of maximum transfer length and submits them serially. WinUSB Read Requests Read operations are similar to write operations. Pass to WinUsb_ReadPipe the interface handle, the PipeId value for the bulk in endpoint, and an appropriately sized empty buffer. When the function returns, the buffer contains the data that was read from the device. The number of bytes that were read is returned in the function s bytesread parameter. The following example reads a character string from the Fx2 device and displays it in a Static control on the application s UI: BOOL ReadFromDevice(HWND hwnd) USHORT bufsize = 12; UCHAR szbuffer[12]; BOOL bresult; ULONG bytesread; bresult = WinUsb_ReadPipe(devInfo.winUSBHandle, devinfo.bulkinpipe, szbuffer, 24, &bytesread, NULL); SendMessage(hwndReadStatic, WM_SETTEXT, 0, (LPARAM) szbuffer); return bresult; Default WinUSB Read Behavior Zero length reads complete immediately with success and are not sent down the stack. If the transfer length is greater than a maximum transfer length, WinUSB divides the request into smaller requests of maximum transfer length and submits them serially. If the transfer length is not a multiple of the endpoint s MaxPacketSize, WinUSB increases the size of the transfer to the next multiple of MaxPacketSize. If a device returns more data than was requested, WinUSB saves the excess data. If data remains from a previous read, WinUSB copies it to the beginning of the next read and completes the read, if necessary.
21 How to Use WinUSB to Communicate with a USB Device 21 Pipe Policies WinUSB allows modifications to its default behavior through policies that can be applied to a pipe (endpoint). Using policies can help IHVs tune WinUSB to best match their device to its capabilities. Table 4 provides a list of the pipe policies that WinUSB supports. Table 4. WinUSB Pipe Policies Policy number Policy name Default 0x01 SHORT_PACKET_TERMINATE Off 0x02 AUTO_CLEAR_STALL Off 0x03 PIPE_TRANSFER_TIMEOUT 5 seconds for control, 0 for others 0x04 IGNORE_SHORT_PACKETS Off 0x05 ALLOW_PARTIAL_READS On 0x06 AUTO_FLUSH Off 0x07 RAW_IO Off 0x09 RESET_PIPE_ON_RESUME Off Table 5 provides information about when you should use each of the pipe policies and describes the resulting behavior when each policy is enabled. Table 5. Pipe Policy Behavior Policy When to use Behavior SHORT_PACKET_TERMINATE Use if your device requires that OUT transfers be terminated with a short packet If enabled, all writes to the endpoint are terminated with a short packet. (most devices do not require this). This policy is valid only for bulk and interrupt OUT endpoints (setting this policy on IN endpoints has no effect). AUTO_CLEAR_STALL Use if you want failed transfers not to leave the endpoint in a stalled state. This policy is valid only for bulk and interrupt IN endpoints. This policy is generally useful only when you pend multiple reads to the endpoint when RAW_IO is disabled. If enabled, when an IN transfer fails and returns a status other than STATUS_CANCELLED or STATUS_DEVICE_NOT_CONNECTED, WinUSB resets the endpoint before completing the failed transfer. If disabled, subsequent transfers to the endpoint fail until the endpoint is manually reset by calling WinUsb_ResetPipe(). No significant performance difference exists between enabling or disabling this policy.
22 How to Use WinUSB to Communicate with a USB Device 22 Policy When to use Behavior PIPE_TRANSFER_TIMEOUT Use if you have an endpoint for which you expect transfers to complete within a specific time. If set to 0, transfers will pend indefinitely until they are manually canceled or they are completed normally. If set to a nonzero value, a timer starts when the request is sent down to the core USB stack (requests do not time out while in a WinUSB queue). When the timer expires, the request is canceled. There is a minor performance penalty because of managing timers. IGNORE_SHORT_PACKETS ALLOW_PARTIAL_READS AUTO_FLUSH Use if you do not want short packets to complete your read requests (this is rare). This policy is valid only for bulk and interrupt IN endpoints with RAW_IO disabled. Use if your device can legally send more data than was requested (possible only if you are requesting nonmultiples of MaxPacketSize). Use if the application wants to read a few bytes to determine how many total bytes to read. This policy is valid only for bulk and interrupt IN endpoints. Use if your device can send more data than was requested and the application does not require any extra data beyond what was requested (possible only if requesting nonmultiples of MaxPacketSize). This policy is valid only for bulk and interrupt IN endpoints where the ALLOW_PARTIAL _READS policy is enabled. Reads complete only if an error occurs, the request is canceled, or all the requested bytes have been received. If disabled and the device returns more data than was requested, the request completes with an error. If enabled, WinUSB immediately completes read requests for zero bytes with success and does not send the requests down the stack. If enabled and the device returns more data than was requested, WinUSB saves the excess data and prepends it to the next read request. If an endpoint returns more bytes than requested, WinUSB discards those bytes without error. Has no effect if ALLOW_PARTIAL_READS is disabled.
23 How to Use WinUSB to Communicate with a USB Device 23 Policy When to use Behavior RAW_IO Use if read performance is a priority and the application submits multiple simultaneous reads to the same endpoint. This policy is valid only for bulk and interrupt IN endpoints (setting the policy on OUT endpoints has no effect). Requests to the endpoint that are not a multiple of MaxPacketSize fail. Requests to the endpoint that are greater than the maximum transfer size (which is retrievable through the MAXIMUM_TRANSFER_SIZE pipe policy) fail. All well formed reads to the endpoint are immediately sent down the stack to be scheduled in the host controller. Significant performance improvement occurs when you submit multiple read requests. The delay between the last packet of one transfer and the first packet of the next transfer is reduced. RESET_PIPE_ON_RESUME Use if the device does not preserve its data toggle state across suspend. This policy is valid only for bulk and interrupt endpoints. On resume from suspend, WinUSB resets the endpoint before it lets requests be sent to the endpoint. For more information about WinUSB policies, see WinUsb_GetPipePolicy and WinUsb_SetPipePolicy in the WDK. WinUSB Power Management WinUSB uses the KMDF state machines for power management. Power policy is managed through calls to WinUsb_SetPowerPolicy, as well as defaults that are set in the registry. To allow a device to wake the system, you must add the SystemWakeEnabled DWORD registry value and set it to a nonzero value. A check box in the device Properties page is automatically enabled so that the user can override the setting. Selective Suspend Selective suspend can be disabled by any of several system or WinUSB settings. A single setting cannot force WinUSB to enable selective suspend. The following Power Policy settings affect the behavior of selective suspend: AUTO_SUSPEND When set to zero, does not selectively suspend the device. SUSPEND_DELAY Sets the time between the device becoming idle and WinUSB requesting the device to selective suspend. The following registry keys affect the behavior of selective suspend: DeviceIdleEnabled When set to zero, does not selectively suspend the device. DeviceIdleIgnoreWakeEnable When set to a nonzero value, suspends the device even if it does not support RemoteWake.
24 How to Use WinUSB to Communicate with a USB Device 24 UserSetDeviceIdleEnabled When set to a nonzero value, enables a check box in the device Properties page that allows the user to override the idle defaults. DefaultIdleState Sets the default value of the AUTO_SUSPEND power policy setting. This registry key is used to enable or disable selective suspend when a handle is not open to the device. DefaultIdleTimeout Sets the default state of the SUSPEND_DELAY power policy setting. Detecting Idle All writes and control transfers force the device into the D0 power state and reset the idle timer. The IN endpoint queues are not power managed. Reads wake the device when they are submitted. However, a device can become idle while a read request pends. Future Feature Considerations Summary Please submit your requests for additional extensions and features to [email protected]. Some possible future features include the following: Isochronous endpoint support. USB3 feature extensions. Resources By using WinUSB, IHVs provide a solid Windows driver solution for their USB hardware devices. WinUSB supports Windows XP and later versions of Windows and supports both 32 bit and 64 bit versions of Windows. Existing Windows 32 bit and 64 bit applications can be easily modified to take advantage of the WinUSB API. WinUSB eliminates all driver related issues and lets IHVs provide a Windows driver solution for their USB devices in much less time and with a lot less effort than writing their own Windows driver. Windows Hardware Developer Central (WHDC): Kernel Mode Code Signing Walkthrough Windows Driver Foundation (WDF) Writing USB Drivers with WDF Windows Driver Kit: Device and Driver Installation
25 How to Use WinUSB to Communicate with a USB Device 25 Device and Driver Installation Design Guide Finish Install Actions (Windows Vista and later) Finish Install Wizard Pages Supported USB Classes USB WinUSB WinUSB User Mode Client Support Routines WinUsb_GetPipePolicy WinUsb_SetPipePolicy MSDN: CreateFile Function Setup API Microsoft Press: Developing Drivers with the Windows Driver Foundation
Hyper-V Server 2008 Setup and Configuration Tool Guide
Hyper-V Server 2008 Setup and Configuration Tool Guide Microsoft Corporation Published: October 2008 Author: Cynthia Nottingham Abstract This guide will help you set up and configure Microsoft Hyper-V
The Microsoft Windows Hypervisor High Level Architecture
The Microsoft Windows Hypervisor High Level Architecture September 21, 2007 Abstract The Microsoft Windows hypervisor brings new virtualization capabilities to the Windows Server operating system. Its
Hyper-V Server 2008 Getting Started Guide
Hyper-V Server 2008 Getting Started Guide Microsoft Corporation Published: October 2008 Author: Cynthia Nottingham Abstract This guide helps you become familiar with Microsoft Hyper-V Server 2008 by providing
Microsoft Hyper-V Server 2008 R2 Getting Started Guide
Microsoft Hyper-V Server 2008 R2 Getting Started Guide Microsoft Corporation Published: July 2009 Abstract This guide helps you get started with Microsoft Hyper-V Server 2008 R2 by providing information
TivaWare USB Library USER S GUIDE SW-TM4C-USBL-UG-2.1.1.71. Copyright 2008-2015 Texas Instruments Incorporated
TivaWare USB Library USER S GUIDE SW-TM4C-USBL-UG-2.1.1.71 Copyright 2008-2015 Texas Instruments Incorporated Copyright Copyright 2008-2015 Texas Instruments Incorporated. All rights reserved. Tiva and
Freescale MQX USB Device User Guide
Freescale MQX USB Device User Guide MQXUSBDEVUG Rev. 4 02/2014 How to Reach Us: Home Page: freescale.com Web Support: freescale.com/support Information in this document is provided solely to enable system
Microsoft Corporation. Status: Preliminary documentation
Microsoft Corporation Status: Preliminary documentation Beta content: This guide is currently in beta form. The AppLocker team greatly appreciates you reviewing the document and looks forward to receiving
http://www.microsoft.com/middleeast/arabicdev/farsi/wpaper.asp Office Language Interface Pack for Farsi (Persian) Content
Page 1 of 11 Office Language Interface Pack for Farsi (Persian) Abstract Microsoft Office Language Interface Pack (LIP) is a high-quality, localized skin for emerging and minority language markets. LIP
AN335 USB DRIVER INSTALLATION METHODS. 1. Introduction. 2. Relevant Documentation. 3. DPInst. 3.1. Installation and Customization
USB DRIVER INSTALLATION METHODS 1. Introduction Users can install a driver for a Silicon Labs USB Device in three ways: Microsoft s Driver Package Installer (DPInst) Legacy Silicon Labs USB Driver Installer
Microsoft Dynamics CRM Adapter for Microsoft Dynamics GP
Microsoft Dynamics Microsoft Dynamics CRM Adapter for Microsoft Dynamics GP May 2010 Find updates to this documentation at the following location. http://go.microsoft.com/fwlink/?linkid=162558&clcid=0x409
Plug and Play for Windows 2000
Operating System Plug and Play for Windows 2000 White Paper Abstract This paper describes the Microsoft Windows 2000 operating system implementation of Plug and Play. Plug and Play is one of a number of
Microsoft Lync Server 2010
Microsoft Lync Server 2010 Scale to a Load Balanced Enterprise Edition Pool with WebMux Walkthrough Published: March. 2012 For the most up to date version of the Scale to a Load Balanced Enterprise Edition
Project management integrated into Outlook
y Project management integrated into Outlook InLoox PM 7.x Help for the configuration for MySQL-Server An InLoox Whitepaper Published: October 2011 Copyright: InLoox GmbH 2011 You find up-to-date information
Windows Azure Pack Installation and Initial Configuration
Windows Azure Pack Installation and Initial Configuration Windows Server 2012 R2 Hands-on lab In this lab, you will learn how to install and configure the components of the Windows Azure Pack. To complete
System Requirements for Microsoft Dynamics NAV 2013 R2
System Requirements for Microsoft Dynamics NAV 2013 R2 February 2014 Contents 3 System Requirements for the Microsoft Dynamics NAV Windows Client 3 Web Client 4 System Requirements for Microsoft Dynamics
AN335 USB DRIVER INSTALLATION UTILITY. 1. Description. 2. Installation. 2.1. Install Package
USB DRIVER INSTALLATION UTILITY 1. Description The driver installer and uninstaller combination is a customizable installation utility for Silicon Laboratories USB drivers. These utilities are completely
File and Printer Sharing with Microsoft Windows
Operating System File and Printer Sharing with Microsoft Windows Microsoft Corporation Published: November 2003 Abstract File and printer sharing in Microsoft Windows allows you to share the contents of
MetroPro Remote Access OMP-0476F. Zygo Corporation Laurel Brook Road P.O. Box 448 Middlefield, Connecticut 06455
MetroPro Remote Access OMP-0476F Zygo Corporation Laurel Brook Road P.O. Box 448 Middlefield, Connecticut 06455 Telephone: (860) 347-8506 E-mail: [email protected] Website: www.zygo.com ZYGO CUSTOMER SUPPORT
Troubleshooting File and Printer Sharing in Microsoft Windows XP
Operating System Troubleshooting File and Printer Sharing in Microsoft Windows XP Microsoft Corporation Published: November 2003 Updated: August 2004 Abstract File and printer sharing for Microsoft Windows
Application Power Management for Mobility
Application Power Management for Mobility White Paper March 20, 2002 Copyright 2002 Intel Corporation Contents 1. Introduction... 4 1.1. Overview... 4 1.2. Audience... 4 2. Application Power Management
Deploying Microsoft RemoteFX on a Single Remote Desktop Virtualization Host Server Step-by-Step Guide
Deploying Microsoft RemoteFX on a Single Remote Desktop Virtualization Host Server Step-by-Step Guide Microsoft Corporation Published: October 2010 Abstract This step-by-step guide walks you through the
Windows Scheduled Tasks Management Pack Guide for System Center Operations Manager. Published: 07 March 2013
Windows Scheduled Tasks Management Pack Guide for System Center Operations Manager Published: 07 March 2013 Copyright Information in this document, including URL and other Internet Web site references,
Microsoft Windows Server System White Paper
Introduction to Network Access Protection Microsoft Corporation Published: June 2004, Updated: May 2006 Abstract Network Access Protection, a platform for Microsoft Windows Server "Longhorn" (now in beta
Microsoft Office Communicator 2007 Getting Started Guide. Published: July 2007
Microsoft Office Communicator 2007 Getting Started Guide Published: July 2007 Information in this document, including URL and other Internet Web site references, is subject to change without notice. Unless
Dell Enterprise Reporter 2.5. Configuration Manager User Guide
Dell Enterprise Reporter 2.5 2014 Dell Inc. ALL RIGHTS RESERVED. This guide contains proprietary information protected by copyright. The software described in this guide is furnished under a software license
Windows Small Business Server 2003 Upgrade Best Practices
Windows Small Business Server 2003 Upgrade Best Practices Microsoft Corporation Published: May 2005 Version: 1 Abstract To ensure a successful upgrade from the Microsoft Windows Small Business Server 2003
Deploying the Workspace Application for Microsoft SharePoint Online
Microsoft Dynamics GP Deploying the Workspace Application for Microsoft SharePoint Online Microsoft Dynamics GP Workspace is a method to enable Microsoft Excel-based dashboards for SharePoint Online. This
Technical Brief for Windows Home Server Remote Access
Technical Brief for Windows Home Server Remote Access Microsoft Corporation Published: October, 2008 Version: 1.1 Abstract This Technical Brief provides an in-depth look at the features and functionality
Windows BitLocker Drive Encryption Step-by-Step Guide
Windows BitLocker Drive Encryption Step-by-Step Guide Microsoft Corporation Published: September 2006 Abstract Microsoft Windows BitLocker Drive Encryption is a new hardware-enhanced feature in the Microsoft
Product Guide for Windows Home Server
Product Guide for Windows Home Server Microsoft Corporation Published: January, 2009 Version: 1.1 This his Product Guide provides an overview of the features and functionality of Windows Home Server software.
Pipeliner CRM Phaenomena Guide Administration & Setup. 2015 Pipelinersales Inc. www.pipelinersales.com
Administration & Setup 05 Pipelinersales Inc. www.pipelinersales.com Administration & Setup Learn how to manage your sales team with Pipeliner Sales CRM Application. CONTENT. Managing Pipeliner s Users
Iridium Extreme TM Satellite Phone. Data Services Manual
Iridium Extreme TM Satellite Phone Data Services Manual Table of Contents 1 OVERVIEW... 1 2 HOW IT WORKS... 1 3 BEFORE INSTALLING... 2 4 USB DRIVER INSTALLATION... 3 5 MODEM INSTALLATION AND CONFIGURATION...
Lab Answer Key for Module 11: Managing Transactions and Locks
Lab Answer Key for Module 11: Managing Transactions and Locks Table of Contents Lab 11: Managing Transactions and Locks 1 Exercise 1: Using Transactions 1 Exercise 2: Managing Locks 3 Information in this
Getting Started with IntelleView POS Administrator Software
Getting Started with IntelleView POS Administrator Software Administrator s Guide for Software Version 1.2 About this Guide This administrator s guide explains how to start using your IntelleView POS (IntelleView)
Windows Embedded Security and Surveillance Solutions
Windows Embedded Security and Surveillance Solutions Windows Embedded 2010 Page 1 Copyright The information contained in this document represents the current view of Microsoft Corporation on the issues
Pipeliner CRM Phaenomena Guide Add-In for MS Outlook. 2015 Pipelinersales Inc. www.pipelinersales.com
Add-In for MS Outlook 205 Pipelinersales Inc. www.pipelinersales.com Add-In for MS Outlook Learn how to use sales lead management with Pipeliner MS Outlook Add-In. CONTENT. Setting up Pipeliner Add-In
Pipeliner CRM Phaenomena Guide Opportunity Management. 2015 Pipelinersales Inc. www.pipelinersales.com
Opportunity Management 205 Pipelinersales Inc. www.pipelinersales.com Opportunity Management Learn how to manage sales opportunities with Pipeliner Sales CRM Application. CONTENT. Creating and sharing
Test Center Enterprise. ios Device Onboarding Guide
Test Center Enterprise ios Device Onboarding Guide Copyright Copyright 2012 Keynote DeviceAnywhere. All Rights Reserved. March 2012. Notice 2012 Keynote DeviceAnywhere. All rights reserved. THE INFORMATION
Using NSM for Event Notification. Abstract. with DM3, R4, and Win32 Devices
Using NSM for Event Notification with DM3, R4, and Win32 Devices Abstract This document explains why Native Synchronization Methods (NSM) is the best solution for controlling synchronization of DM3, R4,
The 2007 R2 Version of Microsoft Office Communicator Mobile for Windows Mobile: Frequently Asked Questions
The 2007 R2 Version of Microsoft Office Communicator Mobile for Windows Mobile: Frequently Asked Questions Published: December 2008 Information in this document, including URL and other Internet Web site
How To Set Up A Load Balancer With Windows 2010 Outlook 2010 On A Server With A Webmux On A Windows Vista V2.2.5.2 (Windows V2) On A Network With A Server (Windows) On
Load Balancing Exchange 2010 OWA for External Access using WebMux Published: April 2011 Information in this document, including URL and other Internet Web site references, is subject to change without
Atmel AVR4903: ASF - USB Device HID Mouse Application. Atmel Microcontrollers. Application Note. Features. 1 Introduction
Atmel AVR4903: ASF - USB Device HID Mouse Application Features USB 2.0 compliance - Chapter 9 compliance - HID compliance - Low-speed (1.5Mb/s) and full-speed (12Mb/s) data rates Standard USB HID mouse
Microsoft Office Communications Server 2007 R2
Microsoft Office Communications Server 2007 R2 Scale to a Load Balanced Enterprise Edition Pool with WebMux Walkthrough Published: Sept. 2009 For the most up-to-date version of the Scale to a Load Balanced
Pipeliner CRM Phaenomena Guide Sales Target Tracking. 2015 Pipelinersales Inc. www.pipelinersales.com
Sales Target Tracking 05 Pipelinersales Inc. www.pipelinersales.com Sales Target Tracking Learn how to set up Sales Target with Pipeliner Sales CRM Application. CONTENT. Setting up Sales Dynamic Target
VMware/Hyper-V Backup Plug-in User Guide
VMware/Hyper-V Backup Plug-in User Guide COPYRIGHT No part of this publication may be reproduced, stored in a retrieval system, or transmitted in any form or by any means, electronic, mechanical, photocopying,
How to Secure a Groove Manager Web Site
How to Secure a Groove Manager Web Site Information in this document, including URL and other Internet Web site references, is subject to change without notice. Unless otherwise noted, the companies, organizations,
Pipeliner CRM Phaenomena Guide Importing Leads & Opportunities. 2015 Pipelinersales Inc. www.pipelinersales.com
Importing Leads & Opportunities 205 Pipelinersales Inc. www.pipelinersales.com Importing Leads & Opportunities Learn how to import opportunities and leads into Pipeliner Sales CRM Application. CONTENT.
Windows Server 2008 R2 Hyper-V Live Migration
Windows Server 2008 R2 Hyper-V Live Migration White Paper Published: August 09 This is a preliminary document and may be changed substantially prior to final commercial release of the software described
Using WinUSB in a Visual Studio Project with Freescale USB device controller
Freescale Semiconductor Document Number: AN4378 Application Note Rev. 0, 10/2011 Using WinUSB in a Visual Studio Project with Freescale USB device controller by: Paolo Alcantara Microcontroller Solutions
APPLICATION NOTE 1740 White Paper 6: 1-Wire Drivers Installation Guide for Windows
Maxim > Design Support > Technical Documents > Application Notes > ibutton > APP 1740 Keywords: 1-Wire, 1-Wire Drivers, OneWire, OneWire Drivers, 1-Wire Drivers Installation, Driver Installation, ibutton,
Creating and Deploying Active Directory Rights Management Services Templates Step-by-Step Guide
Creating and Deploying Active Directory Rights Management Services Templates Step-by-Step Guide Microsoft Corporation Published: January 2008 Author: Brian Lich Editor: Carolyn Eller Abstract This step-by-step
Universal Serial Bus Implementers Forum EHCI and xhci High-speed Electrical Test Tool Setup Instruction
Universal Serial Bus Implementers Forum EHCI and xhci High-speed Electrical Test Tool Setup Instruction Revision 0.41 December 9, 2011 1 Revision History Rev Date Author(s) Comments 0.1 June 7, 2010 Martin
Lab Answer Key for Module 6: Configuring and Managing Windows SharePoint Services 3.0. Table of Contents Lab 1: Configuring and Managing WSS 3.
Lab Answer Key for Module 6: Configuring and Managing Windows SharePoint Services 3.0 Table of Contents Lab 1: Configuring and Managing WSS 3.0 1 Information in this document, including URL and other Internet
Management Reporter Integration Guide for Microsoft Dynamics GP
Microsoft Dynamics Management Reporter Integration Guide for Microsoft Dynamics GP July 2013 Find updates to this documentation at the following location: http://go.microsoft.com/fwlink/?linkid=162565
73S1215F, 73S1217F Device Firmware Upgrade Host Driver/Application Development User s Guide April 27, 2009 Rev. 1.00 UG_12xxF_029
Simplifying System Integration TM 73S1215F, 73S1217F Device Firmware Upgrade Host Driver/Application Development User s Guide April 27, 2009 Rev. 1.00 UG_12xxF_029 73S1215, 73S1217F DFU Host Driver/Application
Step-by-Step Guide for Microsoft Advanced Group Policy Management 4.0
Step-by-Step Guide for Microsoft Advanced Group Policy Management 4.0 Microsoft Corporation Published: September 2009 Abstract This step-by-step guide describes a sample scenario for installing Microsoft
Customizing Remote Desktop Web Access by Using Windows SharePoint Services Stepby-Step
Customizing Remote Desktop Web Access by Using Windows SharePoint Services Stepby-Step Guide Microsoft Corporation Published: July 2009 Updated: September 2009 Abstract Remote Desktop Web Access (RD Web
How To Install Outlook Addin On A 32 Bit Computer
Deployment Guide - Outlook Add-In www.exclaimer.com Contents About This Guide... 3 System Requirements... 4 Software... 4 Installation Files... 5 Deployment Preparation... 6 Installing the Add-In Manually...
Adobe Acrobat 9 Deployment on Microsoft Windows Group Policy and the Active Directory service
Adobe Acrobat 9 Deployment on Microsoft Windows Group Policy and the Active Directory service white paper TABLE OF CONTENTS 1. Document overview......... 1 2. References............. 1 3. Product overview..........
Secure IIS Web Server with SSL
Secure IIS Web Server with SSL EventTracker v7.x Publication Date: Sep 30, 2014 EventTracker 8815 Centre Park Drive Columbia MD 21045 www.eventtracker.com Abstract The purpose of this document is to help
Chapter 6, The Operating System Machine Level
Chapter 6, The Operating System Machine Level 6.1 Virtual Memory 6.2 Virtual I/O Instructions 6.3 Virtual Instructions For Parallel Processing 6.4 Example Operating Systems 6.5 Summary Virtual Memory General
Symprex Out-of-Office Manager
Symprex Out-of-Office Manager User's Guide Version 6..0. Copyright 014 Symprex Limited. All Rights Reserved. Contents Chapter 1 1 Introduction 1 System Requirements Completing Installation and Permissions
Python for Series 60 Platform
F O R U M N O K I A Getting Started with Python for Series 60 Platform Version 1.2; September 28, 2005 Python for Series 60 Platform Copyright 2005 Nokia Corporation. All rights reserved. Nokia and Nokia
Information in this document, including URL and other Internet Web site references, is subject to change without notice. Unless otherwise noted, the
Information in this document, including URL and other Internet Web site references, is subject to change without notice. Unless otherwise noted, the example companies, organizations, products, domain names,
Configuring RemoteFX on Windows Server 2012 R2
Configuring RemoteFX on Windows Server 2012 R2 [email protected] www.schmittdotnet.com Version 1.0 02/15/2015 Copyright and Disclaimers This guide is for informational purposes only. THE AUTHOR
About Recovery Manager for Active
Dell Recovery Manager for Active Directory 8.6.1 May 30, 2014 These release notes provide information about the Dell Recovery Manager for Active Directory release. About Resolved issues Known issues System
Update and Installation Guide for Microsoft Management Reporter 2.0 Feature Pack 1
Update and Installation Guide for Microsoft Management Reporter 2.0 Feature Pack 1 Microsoft Corporation Published: December 2010 Microsoft Dynamics is a line of integrated, adaptable business management
User Document. Adobe Acrobat 7.0 for Microsoft Windows Group Policy Objects and Active Directory
Adobe Acrobat 7.0 for Microsoft Windows Group Policy Objects and Active Directory Copyright 2005 Adobe Systems Incorporated. All rights reserved. NOTICE: All information contained herein is the property
Using the Motorola Data Collection Solution with MSP
Using the Motorola Data Collection Solution with MSP Using the Motorola Data Collection Solution with MSP 72E-139416-03 Revision A December 2011 2011 by Motorola Solutions, Inc. All rights reserved. No
Overview of Active Directory Rights Management Services with Windows Server 2008 R2
Overview of Active Directory Rights Management Services with Windows Server 2008 R2 Student Manual Module 3: Active Directory Rights Management Clients and Information Rights Management on Desktop Applications
Recommendations for Continua USB PHDC Device Driver Interoperability
Recommendations for Continua USB PHDC Device Driver Interoperability March 2012 Executive Summary This paper defines the Continua Health Alliance position on USB PHDC driver interoperability as it pertains
Windows Server Update Services 3.0 SP2 Step By Step Guide
Windows Server Update Services 3.0 SP2 Step By Step Guide Microsoft Corporation Author: Anita Taylor Editor: Theresa Haynie Abstract This guide provides detailed instructions for installing Windows Server
AT89C5131A Starter Kit... Software User Guide
AT89C5131A Starter Kit... Software User Guide Table of Contents Section 1 Introduction... 1-1 1.1 Abbreviations...1-1 Section 2 Getting Started... 2-3 2.1 Hardware Requirements...2-3 2.2 Software Requirements...2-3
Pipeliner CRM Phaenomena Guide Sales Pipeline Management. 2015 Pipelinersales Inc. www.pipelinersales.com
Sales Pipeline Management 2015 Pipelinersales Inc. www.pipelinersales.com Sales Pipeline Management Learn how to manage sales opportunities with Pipeliner Sales CRM Application. CONTENT 1. Configuring
Quick Start Guide for Parallels Virtuozzo
PROPALMS VDI Version 2.1 Quick Start Guide for Parallels Virtuozzo Rev. 1.1 Published: JULY-2011 1999-2011 Propalms Ltd. All rights reserved. The information contained in this document represents the current
About This Guide... 4. Signature Manager Outlook Edition Overview... 5
Contents About This Guide... 4 Signature Manager Outlook Edition Overview... 5 How does it work?... 5 But That's Not All...... 6 And There's More...... 6 Licensing... 7 Licensing Information... 7 System
Hardware & Software Requirements for BID2WIN Estimating & Bidding, the BUILD2WIN Product Suite, and BID2WIN Management Reporting
Hardware & Software s for BID2WIN Estimating & Bidding, the BUILD2WIN Product Suite, and BID2WIN Management Reporting BID2WIN Software, Inc. Updated 05/08/2012 Abstract This document describes the hardware
Lab Answer Key for Module 1: Installing and Configuring Windows Server 2008. Table of Contents Lab 1: Configuring Windows Server 2008 1
Lab Answer Key for Module 1: Installing and Configuring Windows Server 2008 Table of Contents Lab 1: Configuring Windows Server 2008 1 Information in this document, including URL and other Internet Web
InventoryControl for use with QuoteWerks Quick Start Guide
InventoryControl for use with QuoteWerks Quick Start Guide Copyright 2013 Wasp Barcode Technologies 1400 10 th St. Plano, TX 75074 All Rights Reserved STATEMENTS IN THIS DOCUMENT REGARDING THIRD PARTY
Microsoft Dynamics TM NAV 5.00. Installation & System Management: Application Server for Microsoft Dynamics NAV
Microsoft Dynamics TM NAV 5.00 Installation & System Management: Application Server for Microsoft Dynamics NAV INSTALLATION & SYSTEM MANAGEMENT: APPLICATION SERVER FOR MICROSOFT DYNAMICS NAV Information
Usage Analysis Tools in SharePoint Products and Technologies
Usage Analysis Tools in SharePoint Products and Technologies Date published: June 9, 2004 Summary: Usage analysis allows you to track how websites on your server are being used. The Internet Information
Diamond II v2.3 Service Pack 4 Installation Manual
Diamond II v2.3 Service Pack 4 Installation Manual P/N 460987001B ISS 26APR11 Copyright Disclaimer Trademarks and patents Intended use Software license agreement FCC compliance Certification and compliance
Installing Windows Rights Management Services with Service Pack 2 Step-by- Step Guide
Installing Windows Rights Management Services with Service Pack 2 Step-by- Step Guide Microsoft Corporation Published: October 2006 Author: Brian Lich Editor: Carolyn Eller Abstract This step-by-step guide
Hands-On Lab: WSUS. Lab Manual Expediting WSUS Service for XP Embedded OS
Lab Manual Expediting WSUS Service for XP Embedded OS Summary In this lab, you will learn how to deploy the security update to your XP Pro or XP embedded images. You will also learn how to prepare the
Programmabilty. Programmability in Microsoft Dynamics AX 2009. Microsoft Dynamics AX 2009. White Paper
Programmabilty Microsoft Dynamics AX 2009 Programmability in Microsoft Dynamics AX 2009 White Paper December 2008 Contents Introduction... 4 Scenarios... 4 The Presentation Layer... 4 Business Intelligence
PL-2303 (Chip Rev H, HX, X) USB to Serial Adapter Windows Driver Installer Manual
PL-2303 (Chip Rev H, HX, X) USB to Serial Adapter Windows Driver Installer Manual For Windows 98/ME/2000/XP/Vista/7 Release Version 1.3 (2/4/2010) Contents Introduction Features & Specifications System
Intel Platform Controller Hub EG20T
Intel Platform Controller Hub EG20T General Purpose Input Output (GPIO) Driver for Windows* Order Number: 324257-002US Legal Lines and Disclaimers INFORMATION IN THIS DOCUMENT IS PROVIDED IN CONNECTION
Pipeliner CRM Phaenomena Guide Getting Started with Pipeliner. 2015 Pipelinersales Inc. www.pipelinersales.com
Getting Started with Pipeliner 05 Pipelinersales Inc. www.pipelinersales.com Getting Started with Pipeliner Learn How to Get Started with Pipeliner Sales CRM Application. CONTENT. Setting up Pipeliner
CRM to Exchange Synchronization
CRM to Exchange Synchronization Product Registration Instructions VERSION 2.0 DATE PREPARED: 1/1/2013 DEVELOPMENT: BRITE GLOBAL, INC. 2012 Brite Global, Incorporated. All rights reserved. The information
Simba ODBC Driver with SQL Connector for Apache Cassandra
Simba ODBC Driver with SQL Connector for Apache Cassandra Installation and Configuration Guide May 7, 2013 Simba Technologies Inc. Copyright 2012-2013 Simba Technologies Inc. All Rights Reserved. Information
SUDT AccessPort TM Advanced Terminal / Monitor / Debugger Version 1.37 User Manual
SUDT AccessPort TM Advanced Terminal / Monitor / Debugger Version 1.37 User Manual Version 1.0 - January 20, 2015 CHANGE HISTORY Version Date Description of Changes 1.0 January 20, 2015 Initial Publication
CRM to Exchange Synchronization
CRM to Exchange Synchronization Installation, Configuration and End-User Instructions VERSION 1.0 DATE PREPARED: 9/1/2012 DEVELOPMENT: BRITE GLOBAL, INC. 2012 Brite Global, Incorporated. All rights reserved.
Gigabit Ethernet Packet Capture. User s Guide
Gigabit Ethernet Packet Capture User s Guide Copyrights Copyright 2008 CACE Technologies, Inc. All rights reserved. This document may not, in whole or part, be: copied; photocopied; reproduced; translated;
Distributed File System Replication Management Pack Guide for System Center Operations Manager 2007
Distributed File System Replication Management Pack Guide for System Center Operations Manager 2007 Microsoft Corporation Published: October 2009 Send suggestions and comments about this document to [email protected].
Integrated Virtual Debugger for Visual Studio Developer s Guide VMware Workstation 8.0
Integrated Virtual Debugger for Visual Studio Developer s Guide VMware Workstation 8.0 This document supports the version of each product listed and supports all subsequent versions until the document
Sharp Remote Device Manager (SRDM) Server Software Setup Guide
Sharp Remote Device Manager (SRDM) Server Software Setup Guide This Guide explains how to install the software which is required in order to use Sharp Remote Device Manager (SRDM). SRDM is a web-based
Microsoft Business Solutions Navision 4.0 Development I C/SIDE Introduction Virtual PC Setup Guide. Course Number: 8359B
Microsoft Business Solutions Navision 4.0 Development I C/SIDE Introduction Virtual PC Setup Guide Course Number: 8359B Released: 11/2005 Information in this document, including URL and other Internet
Lepide Software. LepideAuditor for File Server [CONFIGURATION GUIDE] This guide informs How to configure settings for first time usage of the software
Lepide Software LepideAuditor for File Server [CONFIGURATION GUIDE] This guide informs How to configure settings for first time usage of the software Lepide Software Private Limited, All Rights Reserved
Step-by-Step Guide for Creating and Testing Connection Manager Profiles in a Test Lab
Step-by-Step Guide for Creating and Testing Connection Manager Profiles in a Test Lab Microsoft Corporation Published: May, 2005 Author: Microsoft Corporation Abstract This guide describes how to create
