【发布时间】:2013-01-23 06:18:02
【问题描述】:
对不起,我的纯英语。
我有两个进程可以读取和写入数据到相同的值(我的测试就是这样做的)。 有时(每十次)读取方法失败,错误为 ERROR_MORE_DATA,值为 12。 但我从 32 字节的测试中调用 Read 方法。
偶然我查看了@err,hr in watch (GetLastError()) 并看到了 ERROR_NOT_OWNER 错误代码。我知道第二个进程阻塞了密钥,我必须再试一次。
任何人都可以批准我的结论(MSDN 对此没有说什么)? 谁能告诉我其他奇怪的效果?
谢谢。
更新: 我有 UAC 虚拟化。所有更改都存储到 [HKEY_CLASSES_ROOT\VirtualStore\MACHINE\SOFTWARE] 可能是效果虚拟化???
{
...
char name[32] = "";
grandchild.OpenValue("name").Read(name, _countof(name));
...
}
bool RegisteryStorageValue::Read(void* Buffer, size_t Size) throw (IOException)
{
DWORD Value = DWORD(Size);
DWORD rez = ::RegQueryValueEx(mKey, mName.c_str(), NULL, NULL, (BYTE*)Buffer, &Value);
if (rez != ERROR_SUCCESS) // here I have 'rez = ERROR_MORE_DATA' and 'Value = 12'
throw IOException(rez);
return true;
}
bool RegisteryStorageValue::Write(Type type, const void* Buffer, size_t Size) throw (IOException)
{
DWORD rez = ::RegSetValueEx(mKey, mName.c_str(), NULL, getRegType(type), (const BYTE*)Buffer, (DWORD)Size);
if (rez != ERROR_SUCCESS)
throw IOException(rez);
return true;
}
【问题讨论】:
标签: winapi registry getlasterror