CreateProcessAsUser,调用dll函数



使用CreateProcessAsUser,我可以在硬盘上的某个位置调用.exe文件:

CreateProcessAsUser(IntPtr hToken, string lpApplicationName, string lpCommandLine,
                      ref SECURITY_ATTRIBUTES lpProcessAttributes, ref SECURITY_ATTRIBUTES lpThreadAttributes,
                      bool bInheritHandle, Int32 dwCreationFlags, IntPtr lpEnvrionment,
                      string lpCurrentDirectory, ref STARTUPINFO lpStartupInfo,
                      ref PROCESS_INFORMATION lpProcessInformation);

我在网络上找到的每个示例都使用 lpCommandLine 参数来调用程序。我想在 dll 中调用一个函数。有谁知道这是否可能?有一个例子会很好...

谢谢!

不能以其他用户身份直接调用 DLL,因为用户/执行级别是每个进程,而不是 DLL 或线程。必须启动一个新进程,然后调用 DLL。这是使用的技术COM 提升等。如果 DLL 具有正确的签名,则可以尝试使用 rundll32.exe 调用它。

我认为该函数是不可能的。在 dll 中调用方法的标准方法是使用 LoadLibraryGetProcAddress 方法,如以下示例所示:

(摘自MSDN)

// A simple program that uses LoadLibrary and 
// GetProcAddress to access myPuts from Myputs.dll. 
#include <windows.h> 
#include <stdio.h> 
typedef int (__cdecl *MYPROC)(LPWSTR); 
int main( void ) 
{ 
    HINSTANCE hinstLib; 
    MYPROC ProcAdd; 
    BOOL fFreeResult, fRunTimeLinkSuccess = FALSE; 
    // Get a handle to the DLL module.
    hinstLib = LoadLibrary(TEXT("MyPuts.dll")); 
    // If the handle is valid, try to get the function address.
    if (hinstLib != NULL) 
    { 
        ProcAdd = (MYPROC) GetProcAddress(hinstLib, "myPuts"); 
        // If the function address is valid, call the function.
        if (NULL != ProcAdd) 
        {
            fRunTimeLinkSuccess = TRUE;
            (ProcAdd) (L"Message sent to the DLL functionn"); 
        }
        // Free the DLL module.
        fFreeResult = FreeLibrary(hinstLib); 
    } 
    // If unable to call the DLL function, use an alternative.
    if (! fRunTimeLinkSuccess) 
        printf("Message printed from executablen"); 
    return 0;
}

相关内容

  • 没有找到相关文章

最新更新