GetFullPathName 不会获取 DLL 路径
GetFullPathName wont get DLL Path
我正在尝试从资源加载 DLL 并使用 SetWindowsHook 将 DLL 注入所有进程 GetFullPathName 在这种情况下似乎不起作用,现在我问在这种情况下我会怎么做才能获取 DLL 路径,我的代码看起来像这样。我是使用它的新手,因此我似乎无法获得DLL路径
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#include "resource.h"
void ExtractnRun()
{
char* name = getenv("USERNAME");
char info[1500];
char aNewFile[1500];
sprintf(info,"C:\Users\%s\AppData\Local\MicroSoftX",name);
//_mkdir(info);
if (CreateDirectoryA(info, NULL))
{
MessageBoxA(NULL, "Directory Created", "", MB_OK);
}
// Extract From Resource
HRSRC hrsrc = FindResource(0, MAKEINTRESOURCE(IDR_DLL21),"DLL2");
DWORD size = SizeofResource(0, hrsrc);
PVOID buff = LockResource(LoadResource(0, hrsrc));
DWORD dwBytesToWrite = (DWORD)strlen((char*)buff);
DWORD dwBytesWritten = 0;
sprintf(aNewFile, "C:\Users\%s\AppData\Local\MicroSoftX\mshelp.dll", name);
HANDLE hFile = CreateFileA(aNewFile, GENERIC_WRITE, 0, NULL,CREATE_ALWAYS ,FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile)
{
MessageBoxA(NULL, "File Created!", "", MB_OK);
}
/*FILE* f = fopen(aNewFile, "wb");
fwrite(buff,1,size,f);
fclose(f);
*/
if (WriteFile(hFile, buff, size, &dwBytesWritten, NULL))
{
MessageBoxA(NULL, "Data Written to DLL", "", MB_OK);
}
/*STARTUPINFOA si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
*/
char dll[MAX_PATH];
GetFullPathName((LPCSTR)hFile, MAX_PATH, dll, NULL); // Shows Error here Cannot get Full Path of DLL
printf("%sn",dll);
HMODULE MYdll = LoadLibrary(dll);
if (MYdll == NULL)
{
printf("dll cannot be found!n");
getchar();
printf("DLL : %s", MYdll);
}
HOOKPROC addr = (HOOKPROC)GetProcAddress(MYdll, "SayHelloWorld");
if (addr == NULL)
{
printf("Cannot find Address!n");
getchar();
}
HHOOK handle = SetWindowsHookEx(WH_KEYBOARD, addr, MYdll, 0);
if (handle == NULL)
{
printf("Hook Failed!n");
getchar();
}
printf("Program Hooked!n");
getchar();
UnhookWindowsHookEx(handle);
//printf("%sn",dll);
system("PAUSE");
}
int main()
{
ExtractnRun();
return 0;
}
我得到的异常错误如下所示:
在资源示例中0x7764171A (ntdll.dll( 引发的异常.exe: 0xC0000005:访问违规读取位置0x0000009C。
如果存在此异常的处理程序,则程序可能是安全的 继续。
我没有得到正确的什么?
您不能将文件处理程序传递给"GetFullPahtName"。它应该是文件名以查找完整路径。
GetFullPathName((LPCSTR(hFile, MAX_PATH, dll, NULL(;
详情请参阅以下链接。
https://msdn.microsoft.com/en-us/library/windows/desktop/aa364963(v=vs.85(.aspx
相关文章:
- 如何使特定程序仅从安装的路径运行以避免DLL劫持
- 如何从客户端为COM服务器设置dll搜索路径?
- MFC:重写附属 DLL 中 RC 文件中的位图路径
- 设置所需DLL文件的自定义路径:电子应用
- 问题在具有依赖性时从其他路径上加载DLL的DLL
- GetFullPathNameA 不返回 DLL 的路径
- GetFullPathName 不会获取 DLL 路径
- 在 Windows 中加载共享库时在特定路径中选取 dll
- 错误53:找不到文件,而是路径中存在所有DLL
- 当InProcServer32键定义DLL的完整路径时,path环境变量中为什么需要COM DLL的路径
- 搜索.NET组件的搜索路径取决于C /CLI DLL
- Windows找不到DLL在路径中的目录中以为其
- VS2012:“找不到资源编译器DLL.请确保路径正确.”
- Maven NAR插件:在路径上找不到DLL依赖项
- 仅资源 DLL - 文件夹、路径
- QT-在pro中指定DLL路径.文件
- 通过给出DLLName来定位DLL路径
- 设置dll路径来构建qt文件
- 获取dll路径/字符串问题(c++初学者)
- 如何为CMake添加外部DLL路径