gcontini
2020-10-31 3bda284e8fa1df1912c146f1732cc052a3356aa0
disk id loop - Windows
2个文件已修改
22 ■■■■ 已修改文件
src/library/hw_identifier/disk_strategy.cpp 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/library/os/windows/os_win.cpp 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/library/hw_identifier/disk_strategy.cpp
@@ -13,17 +13,16 @@
namespace hw_identifier {
static array<uint8_t, HW_IDENTIFIER_PROPRIETARY_DATA> generate_id_by_sn(const DiskInfo &disk_info) {
    array<uint8_t, HW_IDENTIFIER_PROPRIETARY_DATA> a_disk_id;
    a_disk_id.fill(0);
    size_t size = min(a_disk_id.size(), sizeof(disk_info.disk_sn));
    array<uint8_t, HW_IDENTIFIER_PROPRIETARY_DATA> a_disk_id = {};
    size_t size = min((size_t) HW_IDENTIFIER_PROPRIETARY_DATA,
            sizeof(disk_info.disk_sn));
    memcpy(&a_disk_id[0], disk_info.disk_sn, size);
    return a_disk_id;
}
static array<uint8_t, HW_IDENTIFIER_PROPRIETARY_DATA> generate_id_by_label(const DiskInfo &disk_info) {
    array<uint8_t, HW_IDENTIFIER_PROPRIETARY_DATA> a_disk_id;
    a_disk_id.fill(0);
    array<uint8_t, HW_IDENTIFIER_PROPRIETARY_DATA> a_disk_id = {};
    strncpy((char *)&a_disk_id[0], disk_info.label, a_disk_id.size() - 1);
    return a_disk_id;
}
@@ -31,7 +30,7 @@
static FUNCTION_RETURN generate_disk_pc_id(vector<array<uint8_t, HW_IDENTIFIER_PROPRIETARY_DATA>> &v_disk_id) {
    std::vector<DiskInfo> disk_infos;
    FUNCTION_RETURN result_diskinfos = getDiskInfos(disk_infos);
    if (result_diskinfos != FUNC_RET_OK && result_diskinfos != FUNC_RET_BUFFER_TOO_SMALL) {
    if (result_diskinfos != FUNC_RET_OK) {
        return result_diskinfos;
    }
    if (disk_infos.size() == 0) {
src/library/os/windows/os_win.cpp
@@ -23,11 +23,11 @@
// http://www.ok-soft-gmbh.com/ForStackOverflow/EnumMassStorage.c
// http://stackoverflow.com/questions/3098696/same-code-returns-diffrent-result-on-windows7-32-bit-system
#define MAX_UNITS 30
#define MAX_UNITS 40
// bug check return with diskinfos == null func_ret_ok
FUNCTION_RETURN getDiskInfos(std::vector<DiskInfo>& diskInfos) {
    DWORD fileMaxLen;
    size_t ndrives = 0;
    size_t ndrives = 0, drives_scanned = 0;
    DWORD fileFlags;
    char volName[MAX_PATH], fileSysName[MAX_PATH];
    DWORD volSerial = 0;
@@ -40,7 +40,7 @@
    if (dwResult > 0) {
        return_value = FUNC_RET_OK;
        char* szSingleDrive = szLogicalDrives;
        while (*szSingleDrive && ndrives < MAX_UNITS) {
        while (*szSingleDrive && drives_scanned < MAX_UNITS) {
            // get the next drive
            UINT driveType = GetDriveType(szSingleDrive);
            if (driveType == DRIVE_FIXED) {
@@ -49,8 +49,7 @@
                if (success) {
                    LOG_DEBUG("drive: %s,volume Name: %s, Volume Serial: 0x%x,Filesystem: %s", szSingleDrive, volName,
                              volSerial, fileSysName);
                    DiskInfo diskInfo;
                    memset(&diskInfo, 0, sizeof(diskInfo));
                    DiskInfo diskInfo = {};
                    diskInfo.id = (int)ndrives;
                    diskInfo.label_initialized = true;
                    strncpy(diskInfo.device, volName, min(std::size_t{MAX_PATH}, sizeof(volName)) - 1);
@@ -67,6 +66,8 @@
            } else {
                LOG_DEBUG("This volume is not fixed : %s, type: %d", szSingleDrive);
            }
            szSingleDrive += strlen(szSingleDrive) + 1;
            drives_scanned++;
        }
    }
    if (diskInfos.size() > 0) {