在 MSDN 上,我注意到 VerQueryValue 函数的以下内容:
lplp缓冲区[输出]
低电压空洞
当此方法返回时,包含指向 pBlock 指向的缓冲区中所请求版本信息的指针的地址。当关联的 pBlock 内存被释放时,lplpBuffer 指向的内存也会被释放。_
由于 pBlock 是由调用者分配的,系统如何知道 pBlock 何时被释放?
我正在使用以下代码:
UINT reqSize = ::GetSystemDirectoryW(nullptr, 1);
std::vector<wchar_t> winDirectory (reqSize, 0);
UINT retVal = ::GetSystemDirectoryW(&winDirectory[0], reqSize);
std::wstring filePath(winDirectory.begin(), winDirectory.end()-1);
filePath.append(L"\\kernel32.dll");
DWORD bufSize = ::GetFileVersionInfoSizeW(
filePath.c_str(),
nullptr);
std::vector<BYTE> fileInfo (bufSize, 0);
::GetFileVersionInfoW(
filePath.c_str(),
0,
bufSize,
&fileInfo[0]);
UINT size = 0;
VS_FIXEDFILEINFO * ptr = nullptr;
BOOL error = ::VerQueryValueW(
&fileInfo[0],
L"\\",
reinterpret_cast<LPVOID*>(&ptr),
&size);
VerQueryValue 返回指向您分配的初始内存块内某个位置的指针(GetFileVersionInfoSize 返回足以包含整个版本资源的块的大小以及 ansi 到 unicode 转换等所需的空间)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)