Rundll32.exe 如何运行dll中的函数

IT教程 2年前 (2020) https://www.55wd.com
1,604

rundll

1.概述

 winddows的DLL中的函数是可以直接用Rundll32.exe 运行的。但dll导出函数要符合一定格式。

英文原版本如下:

Rundll32
The Run DLL utility (Rundll32.exe) included in Windows enables you to call functions exported from a 32-bit DLL. These functions must have the following syntax:

void CALLBACK EntryPoint(
  HWND hwnd,        // handle to owner window
  HINSTANCE hinst,  // instance handle for the DLL
  LPTSTR lpCmdLine, // string the DLL will parse
  int nCmdShow      // show state
);
Note that EntryPoint is a placeholder for the actual function name. For a list of possible show states, see WinMain.

The following is the command-line syntax for Rundll32:

rundll32 DllName,FunctionName [Arguments]
DllName 
Specifies the name of the DLL. The name cannot contain spaces, commas, or quotation marks. The utility searches for the DLL using the search criteria documented for the LoadLibrary function. Therefore, it is best to use the short name and provide a full path for the DLL. 
FunctionName 
Specifies the name of the function to call in DllName. Requires a comma (without no spaces) between DllName and FunctionName. 
Arguments 
Optional arguments for FunctionName. 
Rundll32 loads the specified DLL using LoadLibrary, obtains the address of the function using the GetProcAddress function, and calls the function with the specified arguments, if any. When the function returns, Rundll32 unloads the DLL and exits.

Windows NT/2000: It is possible to create a Unicode version of the function. Rundll32 first tries to find a function named EntryPointW. If it cannot find this function, it tries EntryPointA, then EntryPoint. To create a DLL that supports ANSI on Windows 95/98/Me and Unicode otherwise, export two functions: EntryPointW and EntryPoint.

译文:(网上找的)

Rundll32
这个运行DLL的实用工具(Rundll32.exe)是包含在Windows中的,它能让你去调用从一个32位DLL中导出的函数。但是那些被调用的函数必须遵循以下语法规则:

void CALLBACK EntryPoint(
  HWND hwnd,        // 父窗口的句柄
  HINSTANCE hinst,  // DLL的实例句柄
  LPTSTR lpCmdLine, // DLL将要解析的字符串
  int nCmdShow      // 显示状态
);
请注意那个EntryPoint仅仅是一个为了表示真实函数名的一个占位符。对于一系列可能的显示状态,请参见WinMain。

下面是Rundll32在命令行下的语法:
rundll32 DllName,FunctionName [Arguments]
DllName 
指定这个DLL的名字。这个名字不能包含空格,逗号,或引号。这个实用工具为了LoadLibrary这个函数,将会用搜索标准文件记录的方式来搜索这个DLL。因此,对于这个DLL,最好使用短文件名并且提供一个完整路径。
FunctionName 
指定这个在DllName中被调用的函数的名字。要求在DllName和FunctionName之间有一个逗号(不带任何空格)。
Arguments 
对于FunctionName的可选参数。
Rundll32使用LoadLibrary来载入这个指定的DLL,使用GetProcAddress函数来获取函数地址,然后带着这个指定的参数(如果有这个参数的话)去调用函数。当这个函数返回时,Rundll32将卸载这个DLL并退出。

Windows NT/2000:为这个函数创建一个Unicode版本是可能的。Rundll32首先尝试去查找一个命名为EntryPointW的函数。如果无法找到该函数,则会接着尝试EntryPointA,再然后是EntryPoint。为了创建一个在Windows 95/98/Me上支持ANSI和Unicode的DLL,需要导出两个函数:EntryPointW和EntryPoint。

调用方法

在命令行中  rundll32.exe projectname.dll,dllfun 即可

例子:(网上找的)

// dllmain.cpp : Defines the entry point for the DLL application.

#include "stdafx.h"
#include <stdio.h>
#include "fun.h"
extern "C" _declspec(dllexport) void __cdecl dllfun(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow);
BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
extern "C" _declspec(dllexport) void __cdecl dllfun(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow)


{


// MessageBox(NULL,L"lll",L"lllkk",MB_OK);
StartWork(NULL);


return;


}

使用PHPnow配置多个目录,让一台服务器上面运行无限个

手动配置PHPnow多个目录必须在PHPnow环境以及搭建好的情况下配置,让一台服务器上面运行多个网站,下面我们就一步一步的来配置目录;

winlogon.exe,小编告诉你winlogon.exe是什么进程

小编最近在打开任务管理器的时候,看到有一个叫winlogon.exe的程序在进行着。于是出于好奇心的我就去研究了一下。所以满载而归的小

小编告诉你如何让电脑运行更快

电脑的运行速度不仅跟电脑硬件配置高低有关,跟电脑系统依旧也有较大的关联,如果我们平时不注意的话。就会出现电脑运行速度越来越卡

regsvr32,教您regsvr32怎么注册dll

我们都知道电脑系统的注册表在我们的使用中充当着重要的角色,有用户发现,有些注册表没有注册,需要手动进行注册,但是在cmd命令中,输入

电脑蓝屏怎么办?win32k.sys不定时蓝屏解决步骤

内容摘要:现在不少win7或win10的用户在使用电脑时,偶尔会出现蓝屏的情况,基本上可以通过重启来解决,但是有时候会出现&ldquo;win32k.s

文章回顾

大家看了本文Rundll32.exe 如何运行dll中的函数的精彩教程资源内容,是不是对Rundll32.exe 如何运行dll中的函数了解更多,真心希望Rundll32.exe 如何运行dll中的函数能帮助到你, 小编会一直给你带来更多教程资源文章信息。

版权声明:b9b08334b50ab22e 发表于 2020-07-12 7:48:26。

本文由第三方用户分享仅代表作者观点,不代表本网站立场,秉承互联网开放分享的精神,目的在于传递更多信息,加强各行业互通交流,但对内容不作任何保证或承诺,请读者自行参考斟酌。网站发布的信息(包含但不限于版式、图片、字体、文章等素材)由第三方用户分享,版权归原作者所有,本站不承担任何相关的版权纠纷等相关责任。如您认为本篇内容侵犯了您的权益,请与我们联系,我们会及时处理。

豌豆资源网专注分享全网综合资源网站大全,致力于超实用的内容资源搜索。

转载请注明:
本文标题:Rundll32.exe 如何运行dll中的函数
本文地址:https://www.55wd.com/s107884/