我正在尝试计算出LdrLoadDll函数并且没有运气...我也搜索了一些例子,没有太多文档或关于此的正确示例。我知道它究竟是什么。请检查下面的代码。
//declaration function pointer for LdrLoadDll
typedef NTSTATUS (_stdcall*fp_LdrLoadDll)(
IN PWCHAR PathToFile OPTIONAL,
IN ULONG Flags OPTIONAL,
IN PUNICODE_STRING ModuleFileName,
OUT PHANDLE ModuleHandle );
//calling LdrLoadDll using getprocaddress
HANDLE handle;
HMODULE module = LoadLibrary(L"ntdll.dll");
fp_LdrLoadDll loadDll;
loadDll = (fp_LdrLoadDll)GetProcAddress(module,"LdrLoadDll");
if(loadDll == NULL)
{
MessageBox(0,L"Not able to load the function",L"LdrLoadDll",&handle);
}
UNICODE_STRING input;
input.Buffer = L"C:\\Desktop\\myDll.dll";
input.Length = wcslen(input.Buffer)*2;
input.MaximumLength = wcslen(input.Buffer) +2;
NTSTATUS status = loadDll(NULL,LOAD_WITH_ALTERED_SEARCH_PATH,&input,0);
当我执行上述操作时,我的手柄处于无效状态。请帮助我。
答案 0 :(得分:3)
当我初始化Unicode字符串时,它对我有用,如下所示
RtlInitUnicodeString(&input,L"myDll.dll");