天天看點

擷取裝置資訊清單

#include <Windows.h> 

#include <SetupAPI.h> 

#include <stdio.h> 

#include <devguid.h> 

#include <RegStr.h> 

BOOL EnumDeviceInterface(const GUID * InterfaceClassGUID){ 

    HDEVINFO DeviceInfoSet; 

    HDEVINFO NewDeviceInfoSet; 

    SP_DEVICE_INTERFACE_DATA DeviceInterfaceData; 

    PSP_DEVICE_INTERFACE_DETAIL_DATA lpDeviceInterfaceDetailData; 

    DWORD dwBufferSize = 0; 

    DWORD i; 

    DeviceInfoSet = SetupDiCreateDeviceInfoList(NULL,NULL); 

    if(DeviceInfoSet == INVALID_HANDLE_VALUE){ 

        printf("Create device interface failed.(%d)\n",GetLastError()); 

        return 0; 

    } 

    NewDeviceInfoSet = SetupDiGetClassDevsEx(InterfaceClassGUID,NULL,NULL,DIGCF_DEVICEINTERFACE|DIGCF_PRESENT,DeviceInfoSet,NULL,NULL); 

    if(NewDeviceInfoSet == INVALID_HANDLE_VALUE){ 

        printf("Get device interface infomation failed."); 

    DeviceInterfaceData.cbSize = sizeof(DeviceInterfaceData); 

    for(i=0;;i++){ 

        BOOL bResult = SetupDiEnumDeviceInterfaces(NewDeviceInfoSet,NULL,InterfaceClassGUID,i,&DeviceInterfaceData); 

        if(!bResult){ 

            if(bResult != NO_ERROR && GetLastError()!=ERROR_NO_MORE_ITEMS){ 

                printf("ERROR:%d\n",GetLastError()); 

                return FALSE; 

            } 

            break; 

        }else{ 

            lpDeviceInterfaceDetailData = (PSP_DEVICE_INTERFACE_DETAIL_DATA)HeapAlloc(GetProcessHeap(),0,sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA)); 

            lpDeviceInterfaceDetailData->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA); 

            dwBufferSize = lpDeviceInterfaceDetailData->cbSize; 

            while(!SetupDiGetDeviceInterfaceDetail(NewDeviceInfoSet,&DeviceInterfaceData,lpDeviceInterfaceDetailData,dwBufferSize,&dwBufferSize,NULL)){ 

                if(ERROR_INSUFFICIENT_BUFFER == GetLastError()){ 

                    lpDeviceInterfaceDetailData = (PSP_DEVICE_INTERFACE_DETAIL_DATA)HeapReAlloc(GetProcessHeap(),0,lpDeviceInterfaceDetailData,dwBufferSize); 

                    lpDeviceInterfaceDetailData->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA); 

                } 

            printf("DevicePath:%s\n",lpDeviceInterfaceDetailData->DevicePath); 

            HeapFree(GetProcessHeap(),0,lpDeviceInterfaceDetailData); 

        } 

    return TRUE; 

int main(int argc,char * argv[],char *envp[]){ 

    printf("Get device interface information.\n"); 

    EnumDeviceInterface(&GUID_DEVINTERFACE_DISK); 

    return 0; 

本文轉hackfreer51CTO部落格,原文連結:http://blog.51cto.com/pnig0s1992/684000,如需轉載請自行聯系原作者

繼續閱讀