Я пытаюсь создать автономный реестр в памяти, используя файл offreg.dll, предоставленный в пакете windows ddk 7.
Более подробную информацию о offreg.dll вы можете найти здесь: MSDN
В настоящее время при попытке прочитать значение из открытого куста / ключа реестра я получаю следующую ошибку: 234 или ERROR_MORE_DATA
Вот код .h, который содержит ORGetValue:
DWORD
ORAPI
ORGetValue (
__in ORHKEY Handle,
__in_opt PCWSTR lpSubKey,
__in_opt PCWSTR lpValue,
__out_opt PDWORD pdwType,
__out_bcount_opt(*pcbData) PVOID pvData,
__inout_opt PDWORD pcbData
);
Вот код, который я использую для извлечения данных
[DllImport("offreg.dll", CharSet = CharSet.Auto, EntryPoint = "ORGetValue", SetLastError = true, CallingConvention = CallingConvention.StdCall)]
public static extern uint ORGetValue(IntPtr Handle, string lpSubKey, string lpValue, out uint pdwType, out string pvData, out uint pcbData);
IntPtr myHive;
IntPtr myKey;
string myValue;
uint pdwtype;
uint pcbdata;
uint ret3 = ORGetValue(myKey, "", "DefaultUserName", out pdwtype, out myValue, out pcbdata);
Цель - прочитать myValue в виде строки.
Я не уверен, нужно ли мне использовать маршалинг ... или второй вызов с настроенным буфером ... Или действительно, как настроить буфер в C #. Любая помощь или указатели будут с благодарностью.
Спасибо.