BOOL GetDllName(HANDLE hProcess, LPLOAD_DLL_DEBUG_INFO lddi, LPSTR dll_name, int nSize)
{
LPVOID ptr = 0;
ReadProcessMemory(hProcess, lddi->lpImageName, &ptr, sizeof(ptr), NULL);
if( ptr == 0 ) return FALSE; WCHAR dll_name_u[MAX_PATH + 1] = {0};
ReadProcessMemory(hProcess, ptr, dll_name_u, sizeof(dll_name_u), NULL);
if( dll_name_u[0] == 0 ) return FALSE; if( lddi->fUnicode )
wcstombs(dll_name, dll_name_u, nSize);
else
lstrcpyn(dll_name, (LPSTR)dll_name_u, nSize);
return TRUE;
} 这段代码我自己转成这样,不知道接下来怎么转了,一上午了请各位帮帮忙啊,谢谢function GetDllName(hProcess:THandle;lddi:TLoadDLLDebugInfo ;dll_name:string; nSize:Integer):boolean;
var
dll_name_u:array[0..255] of WideChar;
ptr:integer;
xsize:DWORD;
begin
ReadProcessMemory(hProcess, lddi.lpImageName, @ptr, 4, xsize);
ReadProcessMemory(hProcess, Pointer(ptr), @dll_name_u, 255, xsize);
{
LPVOID ptr = 0;
ReadProcessMemory(hProcess, lddi->lpImageName, &ptr, sizeof(ptr), NULL);
if( ptr == 0 ) return FALSE; WCHAR dll_name_u[MAX_PATH + 1] = {0};
ReadProcessMemory(hProcess, ptr, dll_name_u, sizeof(dll_name_u), NULL);
if( dll_name_u[0] == 0 ) return FALSE; if( lddi->fUnicode )
wcstombs(dll_name, dll_name_u, nSize);
else
lstrcpyn(dll_name, (LPSTR)dll_name_u, nSize);
return TRUE;
} 这段代码我自己转成这样,不知道接下来怎么转了,一上午了请各位帮帮忙啊,谢谢function GetDllName(hProcess:THandle;lddi:TLoadDLLDebugInfo ;dll_name:string; nSize:Integer):boolean;
var
dll_name_u:array[0..255] of WideChar;
ptr:integer;
xsize:DWORD;
begin
ReadProcessMemory(hProcess, lddi.lpImageName, @ptr, 4, xsize);
ReadProcessMemory(hProcess, Pointer(ptr), @dll_name_u, 255, xsize);
解决方案 »
- 关于Delphi中存储用户对象的问题
- 简单的拼字符串问题!
- adoquery与dbgrid的问题
- 这就是CSDN广告的效果:200分求最新版的 NativeXml 2.13 (要源码) !
- 如何对用Indy写的一个通信程序做压力测试?
- Delphi5使用ADO总是遇到这个错误,怎么解决?
- 关于获取系统时间的问题!
- 先取有效数字,然后让小数转换为百分数?
- clientdataset的Filter属性,用的时候要注意那些问题啊?
- clientSocket与ServerSocket传输问题?
- 想了一下午还没有想出来!希望朋友帮帮下3个表的查询
- EPSON打印机的通用打印控制AtiveX控件的说明文档
LPVOID 对应 Pointer
function GetDLLName(hProcess: THandle; lddi: LPLOAD_DLL_DEBUG_INFO; var dll_name: AnsiString)
//{
// LPVOID ptr = 0;
var
ptr: Pointer;
nBytes: DWORD;
dll_name_u: array[0..MAX_PATH] of WideChar;
begin
Result := false;
ptr := Nil;
//ReadProcessMemory(hProcess, lddi->lpImageName, &ptr, sizeof(ptr), NULL);
ReadProcessMemory(hProcess, lddi^.lpImageName, @ptr, sizeof(ptr), nBytes);
// if( ptr == 0 ) return FALSE;
if ptr = Nil then exit; // WCHAR dll_name_u[MAX_PATH + 1] = {0};
fillchar(dll_name_u, MAX_PATH * sizeof(dll_name_u[0]), 0);
// ReadProcessMemory(hProcess, ptr, dll_name_u, sizeof(dll_name_u), NULL);
ReadProcessMemory(hProcess, ptr, @dll_name_u[0], sizeof(dll_name_u), nBytes);
// if( dll_name_u[0] == 0 ) return FALSE;
if Word(dll_name_u[0])= 0 then Exit; // if( lddi->fUnicode )
if lddi^.fUnicode <> 0 then
//wcstombs(dll_name, dll_name_u, nSize);
dll_name := WideString(dll_name_u)
// else
else
// lstrcpyn(dll_name, (LPSTR)dll_name_u, nSize);
SetString(dll_name, PAnsiChar(@dll_name_u[0]), strlen(PAnsiChar(@dll_name_u[0])));
// return TRUE;
Result := true;
//}
end;
begin
GetDllName(ProcHand,@DBEvent.LoadDll,dll_name);
messagebox(0,pchar(dll_name),0,0);
用以下的代码,
function GetDLLName(hProcess: THandle; lddi: PLoadDLLDebugInfo; var dll_name: AnsiString):boolean ;
var
ptr: Pointer;
nBytes: DWORD;
dll_name_u: array[0..MAX_PATH] of WideChar;
begin
Result := false;
ptr := Nil;
ReadProcessMemory(hProcess, lddi^.lpImageName, @ptr, sizeof(ptr), nBytes);
if ptr = Nil then messagebox(0,'error1',0,0); //直接 这就弹出了,是怎么回事啊? // WCHAR dll_name_u[MAX_PATH + 1] = {0};
fillchar(dll_name_u, MAX_PATH * sizeof(dll_name_u[0]), 0);
// ReadProcessMemory(hProcess, ptr, dll_name_u, sizeof(dll_name_u), NULL);
ReadProcessMemory(hProcess, ptr, @dll_name_u[0], sizeof(dll_name_u), nBytes);
// if( dll_name_u[0] == 0 ) return FALSE;
if Word(dll_name_u[0])= 0 then messagebox(0,'error2',0,0); // if( lddi->fUnicode )
if lddi^.fUnicode <> 0 then
//wcstombs(dll_name, dll_name_u, nSize);
dll_name := WideString(dll_name_u)
// else
else
// lstrcpyn(dll_name, (LPSTR)dll_name_u, nSize);
SetString(dll_name, PAnsiChar(@dll_name_u[0]), strlen(PAnsiChar(@dll_name_u[0])));
// return TRUE;
Result := true;
//}
end;