BOOL WINAPI SetupDiClassNameFromGuidA(
    _In_ CONST GUID *ClassGuid,
    _Out_writes_(ClassNameSize) PSTR ClassName,
    _In_ DWORD ClassNameSize,
    _Out_opt_ PDWORD RequiredSize
    );

BOOL WINAPI SetupDiClassNameFromGuidW(
    _In_ CONST GUID *ClassGuid,
    _Out_writes_(ClassNameSize) PWSTR ClassName,
    _In_ DWORD ClassNameSize,
    _Out_opt_ PDWORD RequiredSize
    );


BOOL WINAPI SetupDiClassNameFromGuidExA(
    _In_ CONST GUID *ClassGuid,
    _Out_writes_(ClassNameSize) PSTR ClassName,
    _In_ DWORD ClassNameSize,
    _Out_opt_ PDWORD RequiredSize,
    _In_opt_ PCSTR MachineName,
    _Reserved_ PVOID Reserved
    );


BOOL WINAPI SetupDiClassNameFromGuidExW(
    _In_ CONST GUID *ClassGuid,
    _Out_writes_(ClassNameSize) PWSTR ClassName,
    _In_ DWORD ClassNameSize,
    _Out_opt_ PDWORD RequiredSize,
    _In_opt_ PCWSTR MachineName,
    _Reserved_ PVOID Reserved
    );

HDEVINFO WINAPI SetupDiGetClassDevsA(
    _In_opt_ CONST GUID *ClassGuid,
    _In_opt_ PCSTR Enumerator,
    _In_opt_ HWND hwndParent,
    _In_ DWORD Flags
    );

HDEVINFO WINAPI SetupDiGetClassDevsW(
    _In_opt_ CONST GUID *ClassGuid,
    _In_opt_ PCWSTR Enumerator,
    _In_opt_ HWND hwndParent,
    _In_ DWORD Flags
    );

BOOL WINAPI SetupDiDeleteDeviceInfo(
    _In_ HDEVINFO DeviceInfoSet,
    _In_ PSP_DEVINFO_DATA DeviceInfoData
    );

BOOL WINAPI SetupDiEnumDeviceInfo(
    _In_ HDEVINFO DeviceInfoSet,
    _In_ DWORD MemberIndex,
    _Out_ PSP_DEVINFO_DATA DeviceInfoData
    );

BOOL WINAPI SetupDiDestroyDeviceInfoList(
    _In_ HDEVINFO DeviceInfoSet
    );

BOOL WINAPI SetupDiEnumDeviceInterfaces(
    _In_ HDEVINFO DeviceInfoSet,
    _In_opt_ PSP_DEVINFO_DATA DeviceInfoData,
    _In_ CONST GUID *InterfaceClassGuid,
    _In_ DWORD MemberIndex,
    _Out_ PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData
    );


BOOL WINAPI SetupDiGetDeviceRegistryPropertyA(
    _In_ HDEVINFO DeviceInfoSet,
    _In_ PSP_DEVINFO_DATA DeviceInfoData,
    _In_ DWORD Property,
    _Out_opt_ PDWORD PropertyRegDataType,
    _Out_writes_bytes_to_opt_(PropertyBufferSize, *RequiredSize) PBYTE PropertyBuffer,
    _In_ DWORD PropertyBufferSize,
    _Out_opt_ PDWORD RequiredSize
    );

BOOL WINAPI SetupDiGetDeviceRegistryPropertyW(
    _In_ HDEVINFO DeviceInfoSet,
    _In_ PSP_DEVINFO_DATA DeviceInfoData,
    _In_ DWORD Property,
    _Out_opt_ PDWORD PropertyRegDataType,
    _Out_writes_bytes_to_opt_(PropertyBufferSize, *RequiredSize) PBYTE PropertyBuffer,
    _In_ DWORD PropertyBufferSize,
    _Out_opt_ PDWORD RequiredSize
    );
