DLL을 생성 했으므로 창에서 rundll32.exe 명령을 사용하여 함수 중 하나를 실행하려고합니다.CreateProcess로 rundll32.exe 실행
rundll32.exe를 사용하면 명령 줄에서 올바르게 실행됩니다. 그러나, 나는 그것을 (rundll32.exe) 별도의 프로그램에서 호출하고 싶습니다. 직접 사용하는 기본 라이브러리 (Easyhook)에서 32/64 비트 호환성 문제로 인해 코드에서 함수를 직접 호출 할 수 없습니다. 다음은
내가 DLL 함수를 실행하기위한 시도로 사용하고 무엇을 :STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
LPCTSTR application = "C:\\Windows\\system32\\rundll32.exe";
LPTSTR cmd = "C:\\Projects\\Test\\mydll.dll,MyFunc";
BOOL cpRes = CreateProcess(application,
cmd,
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&si,
&pi);
if(cpRes == 0) {
cout << "ERROR\n";
cout << GetLastError() << endl;
} else {
cout << "DLL Launched!" << endl;
}
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
내 콘솔에 출력은 항상 DLL Launched
이다; 그러나 실제로 내 DLL이 실제로 호출되는 효과를 보지 못했습니다 (현재 명령이 파일에 기록하는 방식으로 스텁 아웃 됨).
응용 프로그램을 C:\\Windows\\system32\\notepad.exe
과 같은 것으로 바꾸면 프로그램이 성공적으로 실행됩니다.
ofstream file;
file.open("C:\\Projects\\Test\\test.txt");
file << "I wrote to a file!";
file.close();
Rundll32는 함께 사용할 수없는 이유 CreateProcess를가있다 :
완료, 여기 MyFunc
의 몸인가? 이것을 읽는 동안 나는 LoadLibrary()
과 DLLMain
에 대한 몇 가지 경고를 발견했으나 은처럼 보이지 않습니다.
추가 확인 :
이 현재 (의심) 32 비트 어플리케이션 인 32 비트 rundll32.exe
시작 (로직은 32 또는 64 비트 버전을 호출 나중에 추가 될 것이다).
C:\Windows\system32\rundll32.exe C:\Projects\Test\mydll.dll,MyFunc
가 예상 결과를 실행
EXPORTS
MyFunc
:도있는 .def
파일이
extern "C" __declspec(dllexport) void CALLBACK MyFunc(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow);
void CALLBACK MyFunc(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow) { ... }
을 다음과 같이
내 DLL입니다.
업데이트
NULL
-application
설정과 코멘트에 언급 작동하도록 보인다 cmd를에서 rundll32.exe
을 포함.
관련 문서 다음 CreateProcess()
문서 당
CreateProcess
RunDll32.exe
이 cout을'의 출력 << GetLastError() << endl의 무엇이며, DLL이 제대로 실행되지 않을 때' ? –
@ NaseefUrRahman 출력은 [0] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85)asp)입니다. – user5786682
DLL에서 호출하려고하는 함수의 정확한 서명은 무엇입니까? –