如何实别出USB盘唯一的序列号?

解决方案 »

  1.   

    普通硬盘的你会得到吧?我写了一个程序,可以获得一台电脑上最多8个硬盘的序列号,在Windows2000和Windows98下都没有问题。
      

  2.   

    to zhouyong0371(小周周):逻辑序列号不但格式化后会变,更要命的是随时可以改写。但硬盘的物理序列号是不会变的。我想楼主指的是这个。
      

  3.   

    应该是唯一的不变的物理序号。
    懂WDM驱动程序的人肯定可以。我正在学,帮你查一查...
      

  4.   

    GUID的中的G就是Global,是唯一的全局标识!GUID  myUSBGUID;
    HDEVINFO info = SetupDiGetClassDevs((LPGUID) &ImyUSBGUID, NULL, 
                                            NULL, DIGCF_PRESENT | 
                                            DIGCF_INTERFACEDEVICE);
    if (info == INVALID_HANDLE_VALUE)
        {
            MessageBox("Error %d trying to open enumeration handle for USBGUID\n", GetLastError());
            return NULL;
        }SP_INTERFACE_DEVICE_DATA ifdata;
    ifdata.cbSize = sizeof(ifdata)
    if (!SetupDiEnumDeviceInterfaces(info, NULL, (LPGUID) &Isoc1394GUID,
                                         num, &ifdata))
    {
           SetupDiDestroyDeviceInfoList(info);
           return NULL;
    }DWORD ReqLen;
    SetupDiGetDeviceInterfaceDetail(info, &ifdata, NULL, 0, &ReqLen, NULL);
    PSP_INTERFACE_DEVICE_DETAIL_DATA detail = (PSP_INTERFACE_DEVICE_DETAIL_DATA) new char[ReqLen]);
    if (!detail)
    {
            SetupDiDestroyDeviceInfoList(info);
            break;
    }    detail->cbSize = sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA);
        if (!SetupDiGetDeviceInterfaceDetail(info, &ifdata, detail, needed, NULL, NULL))
        {
            SetupDiDestroyDeviceInfoList(info);
            delete ifDetail;
            return NULL;
        }    char name[MAX_PATH];
        strncpy(name, detail->DevicePath, sizeof(name));
        free((PVOID) detail);
        SetupDiDestroyDeviceInfoList(info);
        
    这个name就是唯一的GUID了!!!
    你试试吧!