私の純粋な英語でごめんなさい。
同じ値でデータの読み取りと書き込みを行うことができる2つのプロセスがあります(私のテストではそれを行います)。時々(10回に1回)readメソッドがエラーERROR_MORE_DATAで失敗し、値は12です。しかし、32バイトのテストからReadメソッドを呼び出します。
偶然、ウォッチ(GetLastError())で@ err、hrを調べて、ERROR_NOT_OWNERエラーコードを確認しました.2番目のプロセスがキーをブロックしていることを理解しているので、再試行する必要があります。
誰かが私の結論を承認できますか(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;
}