Search code examples
c++winapimfcsd-card

Detect drive letter of SD card hardware


Is there a way to programatically detect the driver letter of an SD card(s) on Windows? Does the method support internal and external SD card hardware? Thank you for your time.


Solution

  • You can try GetLogicalDriveStrings to get the drive letters and then use GetDriveType to see, whether a drive is removable or not. Then you can get more device information like this (example is for cd-rom but should show you the idea):

    //handle to the drive to be examined
    HANDLE hDevice = CreateFile(TEXT("\\\\.\\G:"), //Drive to open
    GENERIC_READ|GENERIC_WRITE, //Access to the drive
    FILE_SHARE_READ|FILE_SHARE_WRITE, //Share mode
    NULL, //Security
    OPEN_EXISTING,0, // no file attributes
    NULL);
    
    if (hDevice == INVALID_HANDLE_VALUE) return 0;
    
    CDROM_TOC val; // table of contents for a generic CDROM
    DWORD nBytesReturned;
    
    BOOL bResult= DeviceIoControl(
    hDevice,
    IOCTL_CDROM_READ_TOC,//operation to perform
    &val, sizeof(val),//no input buffer
    &val, sizeof(val),//output buffer
    &nBytesReturned,//#bytes returned
    (LPOVERLAPPED) NULL);//synchronous I/O
    
    CloseHandle(hDevice);