-1

我想知道函数FltGetVolumeGuidName()的实现顺序,我基本上是想从我的系统中获取所有卷的Guid?以下是我尝试过的代码,任何帮助将不胜感激,在此先感谢。

        volumeContext->GUIDinfo.Buffer = NULL;                               //kernel crash here  <<<<======
        volumeContext->GUIDinfo.Length = 0;
        volumeContext->GUIDinfo.MaximumLength = 0;
        //fetching correct size
        (void) FltGetVolumeGuidName(pVolumeList, &volumeContext->GUIDinfo, &BufferSizeNeeded);
        //Allocating space
        if (NULL == volumeContext->GUIDinfo.Buffer) {
            status = STATUS_INSUFFICIENT_RESOURCES;
            DbgPrint("\n STATUS_INSUFFICIENT_RESOURCES");
            break;
        }
        //Memory allocation 
        volumeContext->GUIDinfo.Buffer = (PWCHAR)ExAllocatePoolWithTag(PagedPool, BufferSizeNeeded, MEMTAG_VOL_GUID);
        volumeContext->GUIDinfo.Length = 0;
        ASSERT(BufferSizeNeeded <= UNICODE_STRING_MAX_BYTES);
        volumeContext->GUIDinfo.MaximumLength = (ULONG)BufferSizeNeeded;

        ntStatus = FltGetVolumeGuidName(pVolumeList, &volumeContext->GUIDinfo, &BufferSizeNeeded);
        if (ntStatus == STATUS_BUFFER_TOO_SMALL) {
            DbgPrint("\n STATUS_BUFFER_TOO_SMALL");
        }
4

1 回答 1

0

埃里克,非常感谢你。同意每个 PFLT_VOLUME 我得到一个有效的指针。现在,当我如上所述调用 FltGetVolumeGuidName(PFLT_VOLUME (pVolumeList) &volumeContext->GUIDinfo, BufferSizeNeeded) 并打印 &volumeContext->GUIDinfo = (Null) 和 BufferSizeNeeded = 96 中的值时。通过有关 FltGetVolumeGuidName 的文献,我了解第一次调用FltGetVolumeGuidName 获取 BufferSizeNeeded 并使用此大小并分配内存并再次调用 FltGetVolumeGuidName 以获取 Guid。

如下初始化时出现问题(内核恐慌)

volumeContext->GUIDinfo.Buffer = NULL;   //kernel crash here  <<<<======
volumeContext->GUIDinfo.Length = 0;
volumeContext->GUIDinfo.MaximumLength = 0;
于 2019-12-17T23:27:21.840 回答