任务是确定注册表项的最后写入时间。由于标准RegistryKey类不提供此功能,因此我必须使用WinAPI函数“RegQueryInfoKey”。要获得关键句柄,我通过“RegOpenKeyEx”打开它。使用DllImport从C#调用Win API的访问冲突
这是函数的WinAPI的原型(从MSDN采取):
LONG WINAPI RegOpenKeyEx(
__in HKEY hKey,
__in LPCTSTR lpSubKey,
DWORD ulOptions,
__in REGSAM samDesired,
__out PHKEY phkResult
);
我使用以下声明:
[DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern int RegOpenKeyEx(UIntPtr hkey, string lpSubKey, uint samDesired, ref UIntPtr phkResult);
然后我把它以下列方式:
UIntPtr hKey = UIntPtr.Zero;
string myKeyName = "blablabla";
UIntPtr HKEY_USERS = (UIntPtr)0x80000003;
uint KEY_READ = 0x20019;
RegOpenKeyEx(HKEY_USERS, myKeyName, KEY_READ, ref hKey);
在这一点上,我得到“访问冲突”的例外。我究竟做错了什么? 我认为参数传递有些问题,但是如何正确执行?
谢谢。