首页
社区
课程
招聘
未解决 [求助]怎么得知windows update进行了版本更新
发表于: 2019-8-26 14:34 3204

未解决 [求助]怎么得知windows update进行了版本更新

2019-8-26 14:34
3204
如题,求大佬帮忙,研究了很久还没有找到相关参数

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2019-8-29 14:42 被wx_幼儿园的王编辑 ,原因:
收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 56
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
太难了吧,250查看没有人回答......
2019-8-27 09:16
0
雪    币: 56
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
是否动态磁盘里的卷就当做虚拟磁盘操作
2019-8-28 10:35
0
雪    币: 56
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我研究发现大部分可能是使用了vds.h这个头文件里的接口,但是它的动态链接库之类的,请教下有人知道吗
2019-8-28 13:57
0
雪    币: 1334
活跃值: (1995)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
2019-8-28 15:17
0
雪    币: 56
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
库尔
你这个说明了它确实用了Vds虚拟磁盘管理中的方法
2019-8-28 19:46
0
雪    币: 56
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
库尔
没有具体方法,我现在做到读取diskpack,但是读出来的包不可用,磁盘无法访问
2019-8-28 19:50
0
雪    币: 1443
活跃值: (101)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
网上搜了一下,没有可以直接判断的API接口,但可以通过IOCTL_DISK_GET_DRIVE_LAYOUT_EX间接获取到。
#include <tchar.h>
#include <windows.h>
#include <winioctl.h>

const GUID PARTITION_LDM_DATA_GUID = { 0xAF9B60A0L, 0x1431, 0x4F62, 0xBC, 0x68, 0x33, 0x11, 0x71, 0x4A, 0x69, 0xAD };

bool IsDynamicPartition(PARTITION_INFORMATION_EX *pPartitionInfo)
{
    if (pPartitionInfo->PartitionStyle == PARTITION_STYLE_MBR)
    {
        return pPartitionInfo->Mbr.PartitionType == PARTITION_LDM;
    }
    else if (pPartitionInfo->PartitionStyle == PARTITION_STYLE_GPT)
    {
        return IsEqualGUID(pPartitionInfo->Gpt.PartitionType, PARTITION_LDM_DATA_GUID);
    }
    return false;
}

bool IsDynamicDisk(int nDiskNo)
{
    bool ret = false;
    TCHAR szDiskPath[MAX_PATH];
    wsprintf(szDiskPath, TEXT("\\\\.\\PhysicalDrive%d"), nDiskNo);
    HANDLE hDisk = CreateFile(szDiskPath, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, OPEN_EXISTING, 0, nullptr);
    if (hDisk != INVALID_HANDLE_VALUE)
    {
        DRIVE_LAYOUT_INFORMATION_EX *pInfo;
        DWORD dwBytesReturn = 0;
        int nPartitionCount = 64;
        DWORD dwSize = sizeof(DRIVE_LAYOUT_INFORMATION_EX) + nPartitionCount * sizeof(PARTITION_INFORMATION_EX);
        pInfo = (DRIVE_LAYOUT_INFORMATION_EX *) new BYTE[dwSize];
        if (DeviceIoControl(hDisk, IOCTL_DISK_GET_DRIVE_LAYOUT_EX, nullptr, 0, (LPVOID)pInfo, dwSize, &dwBytesReturn, nullptr))
        {
            for (DWORD i = 0; i < pInfo->PartitionCount; ++i)
            {
                if (IsDynamicPartition(pInfo->PartitionEntry + i))
                {
                    ret = true;
                    break;
                }
            }
        }
        delete pInfo;
        CloseHandle(hDisk);
    }
    
    return ret;
}

int _tmain()
{
    _tprintf(_T("PhysicalDrive0 is %s disk.\n"), IsDynamicDisk(0) ? _T("dynamic") : _T("basic"));
    return 0;
}

最后于 2019-8-29 08:01 被cvrock编辑 ,原因:
2019-8-29 08:00
1
雪    币: 56
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
cvrock 网上搜了一下,没有可以直接判断的API接口,但可以通过IOCTL_DISK_GET_DRIVE_LAYOUT_EX间接获取到。#include&nbsp;&lt;tchar.h& ...
逻辑磁盘管理器(LDM)分区就是判断这是动态磁盘吗
2019-8-29 09:15
0
雪    币: 1443
活跃值: (101)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
wx_幼儿园的王 逻辑磁盘管理器(LDM)分区就是判断这是动态磁盘吗
我理解是的,动态磁盘之所以能动态就是依赖了LDM,基本磁盘如果也依赖了LDM就不“基本”了,所以可以通过它来判断。
2019-8-29 10:02
0
游客
登录 | 注册 方可回帖
返回
//