什么是.net当前Process.MainModule的C ++等价物?

时间:2012-03-21 16:45:10

标签: c# c++ winapi process

在c#中执行此操作时

// get the current process
Process currentProcess  = System.Diagnostics.Process.GetCurrentProcess();

我能做到

currentProcess.MainModule

c ++中是否有类似的功能?

2 个答案:

答案 0 :(得分:4)

我假设你指的是Windows。如果是这样,那么你需要这个:

GetModuleHandle(NULL);

这将返回用于创建进程的模块的模块句柄。在GetModuleHandle的文档中查找完整的详细信息。

如果你想要模块的文件名而不是模块句柄,那么你需要GetModuleFileName代替。

答案 1 :(得分:0)

GetProcess()的反编译来源ILSpy查看,它说:

public static Process GetCurrentProcess()
{
    return new Process(".", false, NativeMethods.GetCurrentProcessId(), null);
}

NativeMethods.GetCurrentProcessId()声明为

[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
public static extern int GetCurrentProcessId();

哪个引用GetCurrentProcessId function

MainModule定义为

public ProcessModule MainModule
{
    get
    {
        if (this.OperatingSystem.Platform == PlatformID.Win32NT)
        {
            this.EnsureState((Process.State)3);
            ModuleInfo firstModuleInfo = 
                NtProcessManager.GetFirstModuleInfo(this.processId);
            return new ProcessModule(firstModuleInfo);
        }
        ProcessModuleCollection processModuleCollection = this.Modules;
        this.EnsureState(Process.State.HaveProcessInfo);
        foreach (ProcessModule processModule in processModuleCollection)
        {
            if (processModule.moduleInfo.Id == this.processInfo.mainModuleId)
            {
                return processModule;
            }
        }
        return null;
    }
}

反过来似乎可以归结为EnumProcessModules native function

因此,通过使用GetCurrentProcessIdEnumProcessModules函数,您应该能够获得类似的结果

currentProcess.MainModule