mirror of
https://github.com/reactos/reactos.git
synced 2025-08-04 08:15:41 +00:00
Create a branch for cmake bringup.
svn path=/branches/cmake-bringup/; revision=48236
This commit is contained in:
parent
a28e798006
commit
c424146e2c
20602 changed files with 0 additions and 1140137 deletions
33
drivers/usb/usbd/test.c
Normal file
33
drivers/usb/usbd/test.c
Normal file
|
@ -0,0 +1,33 @@
|
|||
#include <stdio.h>
|
||||
#include <windows.h>
|
||||
#include <usbdi.h>
|
||||
|
||||
typedef ULONG NTAPI
|
||||
(*USBD_GetInterfaceLengthTYPE)(
|
||||
PUSB_INTERFACE_DESCRIPTOR InterfaceDescriptor,
|
||||
PUCHAR BufferEnd
|
||||
);
|
||||
|
||||
int main()
|
||||
{
|
||||
HMODULE Lib;
|
||||
USB_INTERFACE_DESCRIPTOR InterfaceDescriptor;
|
||||
USBD_GetInterfaceLengthTYPE USBD_GetInterfaceLength;
|
||||
|
||||
InterfaceDescriptor.bLength = 10;
|
||||
InterfaceDescriptor.bNumEndpoints = 2;
|
||||
InterfaceDescriptor.bDescriptorType = /*USB_INTERFACE_DESCRIPTOR_TYPE*/2;
|
||||
InterfaceDescriptor.iInterface = 0x1;
|
||||
|
||||
Lib = LoadLibraryEx("usbd.sys", NULL, DONT_RESOLVE_DLL_REFERENCES);
|
||||
USBD_GetInterfaceLength = (USBD_GetInterfaceLengthTYPE)GetProcAddress(Lib, "USBD_GetInterfaceLength");
|
||||
printf("%X\n", USBD_GetInterfaceLength(&InterfaceDescriptor, (PUCHAR)((DWORD)&InterfaceDescriptor + sizeof(InterfaceDescriptor))));
|
||||
FreeLibrary(Lib);
|
||||
|
||||
Lib = LoadLibraryEx("usbd.ms", NULL, DONT_RESOLVE_DLL_REFERENCES);
|
||||
USBD_GetInterfaceLength = (USBD_GetInterfaceLengthTYPE)GetProcAddress(Lib, "USBD_GetInterfaceLength");
|
||||
printf("%X\n", USBD_GetInterfaceLength(&InterfaceDescriptor, (PUCHAR)((DWORD)&InterfaceDescriptor + sizeof(InterfaceDescriptor))));
|
||||
FreeLibrary(Lib);
|
||||
return 0;
|
||||
}
|
||||
|
520
drivers/usb/usbd/usbd.c
Normal file
520
drivers/usb/usbd/usbd.c
Normal file
|
@ -0,0 +1,520 @@
|
|||
/*
|
||||
* PROJECT: ReactOS Universal Serial Bus Driver/Helper Library
|
||||
* LICENSE: GPL - See COPYING in the top level directory
|
||||
* FILE: drivers/usb/usbd/usbd.c
|
||||
* PURPOSE: Helper Library for USB
|
||||
* PROGRAMMERS:
|
||||
* Filip Navara <xnavara@volny.cz>
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* Universal Serial Bus Driver/Helper Library
|
||||
*
|
||||
* Written by Filip Navara <xnavara@volny.cz>
|
||||
*
|
||||
* Notes:
|
||||
* This driver was obsoleted in Windows XP and most functions
|
||||
* became pure stubs. But some of them were retained for backward
|
||||
* compatibilty with existing drivers.
|
||||
*
|
||||
* Preserved functions:
|
||||
*
|
||||
* USBD_Debug_GetHeap (implemented)
|
||||
* USBD_Debug_RetHeap (implemented)
|
||||
* USBD_CalculateUsbBandwidth (implemented, tested)
|
||||
* USBD_CreateConfigurationRequestEx (implemented)
|
||||
* USBD_CreateConfigurationRequest
|
||||
* USBD_GetInterfaceLength (implemented)
|
||||
* USBD_ParseConfigurationDescriptorEx (implemented)
|
||||
* USBD_ParseDescriptors (implemented)
|
||||
* USBD_GetPdoRegistryParameters (implemented)
|
||||
*/
|
||||
|
||||
#include <ntddk.h>
|
||||
#include <usbdi.h>
|
||||
#ifndef PLUGPLAY_REGKEY_DRIVER
|
||||
#define PLUGPLAY_REGKEY_DRIVER 2
|
||||
#endif
|
||||
typedef struct _USBD_INTERFACE_LIST_ENTRY {
|
||||
PUSB_INTERFACE_DESCRIPTOR InterfaceDescriptor;
|
||||
PUSBD_INTERFACE_INFORMATION Interface;
|
||||
} USBD_INTERFACE_LIST_ENTRY, *PUSBD_INTERFACE_LIST_ENTRY;
|
||||
|
||||
NTSTATUS NTAPI
|
||||
DriverEntry(PDRIVER_OBJECT DriverObject,
|
||||
PUNICODE_STRING RegistryPath)
|
||||
{
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
ULONG NTAPI
|
||||
DllInitialize(ULONG Unknown)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
ULONG NTAPI
|
||||
DllUnload(VOID)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
PVOID NTAPI
|
||||
USBD_Debug_GetHeap(ULONG Unknown1, POOL_TYPE PoolType, ULONG NumberOfBytes,
|
||||
ULONG Tag)
|
||||
{
|
||||
return ExAllocatePoolWithTag(PoolType, NumberOfBytes, Tag);
|
||||
}
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
VOID NTAPI
|
||||
USBD_Debug_RetHeap(PVOID Heap, ULONG Unknown2, ULONG Unknown3)
|
||||
{
|
||||
ExFreePool(Heap);
|
||||
}
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
VOID NTAPI
|
||||
USBD_Debug_LogEntry(PCHAR Name, ULONG_PTR Info1, ULONG_PTR Info2,
|
||||
ULONG_PTR Info3)
|
||||
{
|
||||
}
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
PVOID NTAPI
|
||||
USBD_AllocateDeviceName(ULONG Unknown)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
ULONG NTAPI
|
||||
USBD_CalculateUsbBandwidth(
|
||||
ULONG MaxPacketSize,
|
||||
UCHAR EndpointType,
|
||||
BOOLEAN LowSpeed
|
||||
)
|
||||
{
|
||||
ULONG OverheadTable[] = {
|
||||
0x00, /* UsbdPipeTypeControl */
|
||||
0x09, /* UsbdPipeTypeIsochronous */
|
||||
0x00, /* UsbdPipeTypeBulk */
|
||||
0x0d /* UsbdPipeTypeInterrupt */
|
||||
};
|
||||
ULONG Result;
|
||||
|
||||
if (OverheadTable[EndpointType] != 0)
|
||||
{
|
||||
Result = ((MaxPacketSize + OverheadTable[EndpointType]) * 8 * 7) / 6;
|
||||
if (LowSpeed)
|
||||
return Result << 3;
|
||||
return Result;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
ULONG NTAPI
|
||||
USBD_Dispatch(ULONG Unknown1, ULONG Unknown2, ULONG Unknown3, ULONG Unknown4)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
VOID NTAPI
|
||||
USBD_FreeDeviceMutex(PVOID Unknown)
|
||||
{
|
||||
}
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
VOID NTAPI
|
||||
USBD_FreeDeviceName(PVOID Unknown)
|
||||
{
|
||||
}
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
VOID NTAPI
|
||||
USBD_WaitDeviceMutex(PVOID Unknown)
|
||||
{
|
||||
}
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
ULONG NTAPI
|
||||
USBD_GetSuspendPowerState(ULONG Unknown1)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
NTSTATUS NTAPI
|
||||
USBD_InitializeDevice(ULONG Unknown1, ULONG Unknown2, ULONG Unknown3,
|
||||
ULONG Unknown4, ULONG Unknown5, ULONG Unknown6)
|
||||
{
|
||||
return STATUS_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
NTSTATUS NTAPI
|
||||
USBD_RegisterHostController(ULONG Unknown1, ULONG Unknown2, ULONG Unknown3,
|
||||
ULONG Unknown4, ULONG Unknown5, ULONG Unknown6, ULONG Unknown7,
|
||||
ULONG Unknown8, ULONG Unknown9, ULONG Unknown10)
|
||||
{
|
||||
return STATUS_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
NTSTATUS NTAPI
|
||||
USBD_GetDeviceInformation(ULONG Unknown1, ULONG Unknown2, ULONG Unknown3)
|
||||
{
|
||||
return STATUS_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
NTSTATUS NTAPI
|
||||
USBD_CreateDevice(ULONG Unknown1, ULONG Unknown2, ULONG Unknown3,
|
||||
ULONG Unknown4, ULONG Unknown5)
|
||||
{
|
||||
return STATUS_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
NTSTATUS NTAPI
|
||||
USBD_RemoveDevice(ULONG Unknown1, ULONG Unknown2, ULONG Unknown3)
|
||||
{
|
||||
return STATUS_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
VOID NTAPI
|
||||
USBD_CompleteRequest(ULONG Unknown1, ULONG Unknown2)
|
||||
{
|
||||
}
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
VOID NTAPI
|
||||
USBD_RegisterHcFilter(
|
||||
PDEVICE_OBJECT DeviceObject,
|
||||
PDEVICE_OBJECT FilterDeviceObject
|
||||
)
|
||||
{
|
||||
}
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
VOID NTAPI
|
||||
USBD_SetSuspendPowerState(ULONG Unknown1, ULONG Unknown2)
|
||||
{
|
||||
}
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
NTSTATUS NTAPI
|
||||
USBD_MakePdoName(ULONG Unknown1, ULONG Unknown2)
|
||||
{
|
||||
return STATUS_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
NTSTATUS NTAPI
|
||||
USBD_QueryBusTime(
|
||||
PDEVICE_OBJECT RootHubPdo,
|
||||
PULONG CurrentFrame
|
||||
)
|
||||
{
|
||||
return STATUS_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
VOID NTAPI
|
||||
USBD_GetUSBDIVersion(
|
||||
PUSBD_VERSION_INFORMATION Version
|
||||
)
|
||||
{
|
||||
if (Version != NULL)
|
||||
{
|
||||
Version->USBDI_Version = USBDI_VERSION;
|
||||
Version->Supported_USB_Version = 0x100;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
NTSTATUS NTAPI
|
||||
USBD_RestoreDevice(ULONG Unknown1, ULONG Unknown2, ULONG Unknown3)
|
||||
{
|
||||
return STATUS_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
VOID NTAPI
|
||||
USBD_RegisterHcDeviceCapabilities(ULONG Unknown1, ULONG Unknown2,
|
||||
ULONG Unknown3)
|
||||
{
|
||||
}
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
* FIXME: Test
|
||||
*/
|
||||
PURB
|
||||
NTAPI
|
||||
USBD_CreateConfigurationRequestEx(
|
||||
PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor,
|
||||
PUSBD_INTERFACE_LIST_ENTRY InterfaceList
|
||||
)
|
||||
{
|
||||
PURB Urb;
|
||||
ULONG UrbSize;
|
||||
ULONG InterfaceCount;
|
||||
|
||||
for (InterfaceCount = 0;
|
||||
InterfaceList[InterfaceCount].InterfaceDescriptor != NULL;
|
||||
++InterfaceCount)
|
||||
;
|
||||
/* Include the NULL entry */
|
||||
++InterfaceCount;
|
||||
|
||||
UrbSize = sizeof(Urb->UrbSelectConfiguration) +
|
||||
(InterfaceCount * sizeof(PUSBD_INTERFACE_LIST_ENTRY));
|
||||
Urb = ExAllocatePool(NonPagedPool, UrbSize);
|
||||
Urb->UrbSelectConfiguration.Hdr.Function =
|
||||
URB_FUNCTION_SELECT_CONFIGURATION;
|
||||
Urb->UrbSelectConfiguration.Hdr.Length =
|
||||
sizeof(Urb->UrbSelectConfiguration);
|
||||
Urb->UrbSelectConfiguration.ConfigurationDescriptor =
|
||||
ConfigurationDescriptor;
|
||||
memcpy((PVOID)&Urb->UrbSelectConfiguration.Interface, (PVOID)InterfaceList,
|
||||
InterfaceCount * sizeof(PUSBD_INTERFACE_LIST_ENTRY));
|
||||
|
||||
return Urb;
|
||||
}
|
||||
|
||||
/*
|
||||
* @unimplemented
|
||||
*/
|
||||
PURB NTAPI
|
||||
USBD_CreateConfigurationRequest(
|
||||
PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor,
|
||||
PUSHORT Size
|
||||
)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* @unimplemented
|
||||
*/
|
||||
ULONG NTAPI
|
||||
USBD_GetInterfaceLength(
|
||||
PUSB_INTERFACE_DESCRIPTOR InterfaceDescriptor,
|
||||
PUCHAR BufferEnd
|
||||
)
|
||||
{
|
||||
ULONG_PTR Current;
|
||||
PUSB_INTERFACE_DESCRIPTOR CurrentDescriptor = InterfaceDescriptor;
|
||||
ULONG Length = CurrentDescriptor->bLength;
|
||||
|
||||
// USB_ENDPOINT_DESCRIPTOR_TYPE
|
||||
if (CurrentDescriptor->bDescriptorType == USB_INTERFACE_DESCRIPTOR_TYPE)
|
||||
{
|
||||
for (Current = (ULONG_PTR)CurrentDescriptor;
|
||||
Current < (ULONG_PTR)BufferEnd;
|
||||
Current += CurrentDescriptor->bLength)
|
||||
CurrentDescriptor = (PUSB_INTERFACE_DESCRIPTOR)Current;
|
||||
Length += CurrentDescriptor->bLength;
|
||||
|
||||
}
|
||||
return Length;
|
||||
}
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
PUSB_COMMON_DESCRIPTOR NTAPI
|
||||
USBD_ParseDescriptors(
|
||||
PVOID DescriptorBuffer,
|
||||
ULONG TotalLength,
|
||||
PVOID StartPosition,
|
||||
LONG DescriptorType
|
||||
)
|
||||
{
|
||||
PUSB_COMMON_DESCRIPTOR PComDes = StartPosition;
|
||||
|
||||
while(PComDes)
|
||||
{
|
||||
if (PComDes >= (PUSB_COMMON_DESCRIPTOR)
|
||||
((PLONG)DescriptorBuffer + TotalLength) ) break;
|
||||
if (PComDes->bDescriptorType == DescriptorType) return PComDes;
|
||||
if (PComDes->bLength == 0) break;
|
||||
PComDes = PComDes + PComDes->bLength;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
PUSB_INTERFACE_DESCRIPTOR NTAPI
|
||||
USBD_ParseConfigurationDescriptorEx(
|
||||
PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor,
|
||||
PVOID StartPosition,
|
||||
LONG InterfaceNumber,
|
||||
LONG AlternateSetting,
|
||||
LONG InterfaceClass,
|
||||
LONG InterfaceSubClass,
|
||||
LONG InterfaceProtocol
|
||||
)
|
||||
{
|
||||
int x = 0;
|
||||
PUSB_INTERFACE_DESCRIPTOR UsbInterfaceDesc = StartPosition;
|
||||
|
||||
while(UsbInterfaceDesc)
|
||||
{
|
||||
UsbInterfaceDesc = (PUSB_INTERFACE_DESCRIPTOR)
|
||||
USBD_ParseDescriptors(ConfigurationDescriptor,
|
||||
ConfigurationDescriptor->wTotalLength,
|
||||
UsbInterfaceDesc,
|
||||
USB_INTERFACE_DESCRIPTOR_TYPE);
|
||||
|
||||
if (!UsbInterfaceDesc) break;
|
||||
|
||||
if(InterfaceNumber != -1)
|
||||
{
|
||||
if(InterfaceNumber != UsbInterfaceDesc->bInterfaceNumber) x = 1;
|
||||
}
|
||||
if(AlternateSetting != -1)
|
||||
{
|
||||
if(AlternateSetting != UsbInterfaceDesc->bAlternateSetting) x = 1;
|
||||
}
|
||||
if(InterfaceClass != -1)
|
||||
{
|
||||
if(InterfaceClass != UsbInterfaceDesc->bInterfaceClass) x = 1;
|
||||
}
|
||||
if(InterfaceSubClass != -1)
|
||||
{
|
||||
if(InterfaceSubClass != UsbInterfaceDesc->bInterfaceSubClass) x = 1;
|
||||
}
|
||||
if(InterfaceProtocol != -1)
|
||||
{
|
||||
if(InterfaceProtocol != UsbInterfaceDesc->bInterfaceProtocol) x = 1;
|
||||
}
|
||||
|
||||
if (!x) return UsbInterfaceDesc;
|
||||
|
||||
if (UsbInterfaceDesc->bLength == 0) break;
|
||||
UsbInterfaceDesc = UsbInterfaceDesc + UsbInterfaceDesc->bLength;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
PUSB_INTERFACE_DESCRIPTOR NTAPI
|
||||
USBD_ParseConfigurationDescriptor(
|
||||
PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor,
|
||||
UCHAR InterfaceNumber,
|
||||
UCHAR AlternateSetting
|
||||
)
|
||||
{
|
||||
return USBD_ParseConfigurationDescriptorEx(ConfigurationDescriptor,
|
||||
(PVOID)ConfigurationDescriptor, InterfaceNumber, AlternateSetting,
|
||||
-1, -1, -1);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
ULONG NTAPI
|
||||
USBD_GetPdoRegistryParameter(
|
||||
PDEVICE_OBJECT PhysicalDeviceObject,
|
||||
PVOID Parameter,
|
||||
ULONG ParameterLength,
|
||||
PWCHAR KeyName,
|
||||
ULONG KeyNameLength
|
||||
)
|
||||
{
|
||||
NTSTATUS Status;
|
||||
HANDLE DevInstRegKey;
|
||||
|
||||
Status = IoOpenDeviceRegistryKey(PhysicalDeviceObject,
|
||||
PLUGPLAY_REGKEY_DRIVER, STANDARD_RIGHTS_ALL, &DevInstRegKey);
|
||||
if (NT_SUCCESS(Status))
|
||||
{
|
||||
PKEY_VALUE_FULL_INFORMATION FullInfo;
|
||||
UNICODE_STRING ValueName;
|
||||
ULONG Length;
|
||||
|
||||
RtlInitUnicodeString(&ValueName, KeyName);
|
||||
Length = ParameterLength + KeyNameLength + sizeof(KEY_VALUE_FULL_INFORMATION);
|
||||
FullInfo = ExAllocatePool(PagedPool, Length);
|
||||
if (FullInfo)
|
||||
{
|
||||
Status = ZwQueryValueKey(DevInstRegKey, &ValueName,
|
||||
KeyValueFullInformation, FullInfo, Length, &Length);
|
||||
if (NT_SUCCESS(Status))
|
||||
{
|
||||
RtlCopyMemory(Parameter,
|
||||
((PUCHAR)FullInfo) + FullInfo->DataOffset,
|
||||
ParameterLength /*FullInfo->DataLength*/);
|
||||
}
|
||||
ExFreePool(FullInfo);
|
||||
} else
|
||||
Status = STATUS_NO_MEMORY;
|
||||
ZwClose(DevInstRegKey);
|
||||
}
|
||||
return Status;
|
||||
}
|
9
drivers/usb/usbd/usbd.rbuild
Normal file
9
drivers/usb/usbd/usbd.rbuild
Normal file
|
@ -0,0 +1,9 @@
|
|||
<?xml version="1.0"?>
|
||||
<!DOCTYPE module SYSTEM "../../../tools/rbuild/project.dtd">
|
||||
<module name="usbd" type="kernelmodedriver" installbase="system32/drivers" installname="usbd.sys">
|
||||
<importlibrary definition="usbd.spec" />
|
||||
<library>ntoskrnl</library>
|
||||
<library>hal</library>
|
||||
<file>usbd.c</file>
|
||||
<file>usbd.rc</file>
|
||||
</module>
|
5
drivers/usb/usbd/usbd.rc
Normal file
5
drivers/usb/usbd/usbd.rc
Normal file
|
@ -0,0 +1,5 @@
|
|||
#define REACTOS_VERSION_DLL
|
||||
#define REACTOS_STR_FILE_DESCRIPTION "USBD Legacy Driver\0"
|
||||
#define REACTOS_STR_INTERNAL_NAME "usbd\0"
|
||||
#define REACTOS_STR_ORIGINAL_FILENAME "usbd.sys\0"
|
||||
#include <reactos/version.rc>
|
9
drivers/usb/usbd/usbd.spec
Normal file
9
drivers/usb/usbd/usbd.spec
Normal file
|
@ -0,0 +1,9 @@
|
|||
@ stdcall USBD_Debug_GetHeap(long long long long)
|
||||
@ stdcall USBD_Debug_RetHeap(ptr long long)
|
||||
@ stdcall USBD_CalculateUsbBandwidth(long long long)
|
||||
@ stdcall USBD_CreateConfigurationRequestEx(ptr ptr)
|
||||
@ stdcall USBD_CreateConfigurationRequest(ptr ptr)
|
||||
@ stdcall USBD_GetInterfaceLength(ptr ptr)
|
||||
@ stdcall USBD_ParseConfigurationDescriptorEx(ptr ptr long long long long long)
|
||||
@ stdcall USBD_ParseDescriptors(ptr long ptr long)
|
||||
;USBD_GetPdoRegistryParameters
|
Loading…
Add table
Add a link
Reference in a new issue