任務是確定註冊表項的最後寫入時間。由於標準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);
在這一點上,我得到「訪問衝突」的例外。我究竟做錯了什麼? 我認爲參數傳遞有些問題,但是如何正確執行?
謝謝。