DWORD OREnumValue(
__in ORHKEY Handle,
__in DWORD dwIndex,
__out PWSTR lpValueName,
__inout PDWORD lpcValueName,
__out_opt PDWORD lpType,
__out_opt PBYTE lpData,
__inout_opt PDWORD lpcbData
);
我的代码:
public static extern uint OREnumValue(IntPtr Handle, uint dwIndex, [MarshalAsAttribute(UnmanagedType.LPWStr)] out StringBuilder lpValueName, ref int lpcValueName, out uint lpType, out IntPtr lpData, ref int lpcbData);
IntPtr Handle=mykey;
uint dwIndex=0;
StringBuilder lpValueName = new StringBuilder(16383);
int lpcValueName=lpValueName.Capacity;
uint lpType=0;
IntPtr lpData;
int lpcbData = int.MaxValue;
uint ret3= OREnumValue(Handle, dwIndex, out lpValueName, ref lpcValueName, out lpType, out lpData, ref lpcbData);
这给出了一个错误:
ret3=ERROR_MORE_DATA 259
我认为问题出在
- lpData - 我应该为 PBYTE 使用什么?或者
- lpcbData - 我应该使用什么容量?
来自 MSDN
如果 lpData 指定的缓冲区不足以容纳数据,则函数返回 ERROR_MORE_DATA 并将所需的缓冲区大小存储在 lpcbData 指向的变量中。在这种情况下,lpData 的内容是未定义的。