【发布时间】:2010-03-24 20:29:45
【问题描述】:
我正在尝试使用 windows ddk 7 包中提供的 offreg.dll 在内存中创建离线注册表。
您可以在此处找到有关 offreg.dll 的更多信息: MSDN
目前,在尝试使用 ORCreateHive 创建配置单元时,我收到以下错误:
“托管调试助手 'PInvokeStackImbalance' 检测到问题。这可能是因为托管 PInvoke 签名与非托管目标签名不匹配。检查 PInvoke 签名的调用约定和参数是否与目标非托管签名匹配。”
这是包含 ORCreateHive 的 offreg.h 文件:
typedef PVOID ORHKEY;
typedef ORHKEY *PORHKEY;
VOID
ORAPI
ORGetVersion(
__out PDWORD pdwMajorVersion,
__out PDWORD pdwMinorVersion
);
DWORD
ORAPI
OROpenHive (
__in PCWSTR lpHivePath,
__out PORHKEY phkResult
);
DWORD
ORAPI
ORCreateHive (
__out PORHKEY phkResult
);
DWORD
ORAPI
ORCloseHive (
__in ORHKEY Handle
);
以下是我尝试调用 .dll 并创建指针以供将来使用的 C# 代码。
using System.Runtime.InteropServices;
namespace WindowsFormsApplication6
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
[DllImport("offreg.dll", CharSet = CharSet.Auto, EntryPoint = "ORCreateHive", SetLastError=true, CallingConvention = CallingConvention.StdCall)]
public static extern IntPtr ORCreateHive2();
private void button1_Click(object sender, EventArgs e)
{
try
{
IntPtr myHandle = ORCreateHive2();
}
catch (Exception r)
{
MessageBox.Show(r.ToString());
}
}
}
}
过去,我可以毫无问题地使用 user32.dll、icmp.dll 等创建指针。但是,我在使用 offreg.dll 时没有这样的运气。
谢谢。
【问题讨论】: