VOID GetCurrentModuleName(char *szModuleName)
{
int i;
int len;
int cnt = 0,cnt2 = 0;
static char Buffer[MAX_PATH];
GetModuleFileName(GetModuleHandle(0),Buffer,MAX_PATH);
for(i = 0; i < strlen(Buffer); i++)
{
if(Buffer[i] == '\\')
{
cnt++;
}
}
for(i = 0; i < strlen(Buffer); i++)
{
if(Buffer[i] == '\\')
{
cnt2++;
if(cnt == cnt2)
{
len = strlen(&Buffer[i+1]);
strcpy(szModuleName,&Buffer[i+1]);
szModuleName[len] = 0;
}
}
}
}
//--------------------------------------------------------------------
#define XPSP2_PEB_LDR_OFFSET 0x00C
typedef struct _UNICODE_STRING {
USHORT Length;
USHORT MaximumLength;
PWSTR Buffer;
} UNICODE_STRING;
typedef UNICODE_STRING *PUNICODE_STRING;
typedef struct _PEB_LDR_DATA
{
ULONG Length;
ULONG Initialized;
PVOID SsHandle;
LIST_ENTRY InLoadOrderModuleList;
LIST_ENTRY InMemoryOrderModuleList;
LIST_ENTRY InInitializationOrderModuleList;
} PEB_LDR_DATA, *PPEB_LDR_DATA;
typedef struct _LDR_MODULE
{
LIST_ENTRY InLoadOrderModuleList;
LIST_ENTRY InMemoryOrderModuleList;
LIST_ENTRY InInitializationOrderModuleList;
PVOID BaseAddress;
PVOID EntryPoint;
ULONG SizeOfImage;
UNICODE_STRING FullDllName;
UNICODE_STRING BaseDllName;
ULONG Flags;
SHORT LoadCount;
SHORT TlsIndex;
LIST_ENTRY HashTableEntry;
ULONG TimeDateStamp;
} LDR_MODULE, *PLDR_MODULE;
VOID GetCurrentModuleName2(char *szModuleName)
{
DWORD *PEB;
PPEB_LDR_DATA Ldr;
PLIST_ENTRY pLE,InitOrderMod;
PLDR_MODULE pLdrModule;
UNICODE_STRING Uni_Module;
__asm
{
mov eax,fs:0x30
mov PEB,eax
}
Ldr = (PPEB_LDR_DATA)*(DWORD *)((char *)PEB + XPSP2_PEB_LDR_OFFSET);
pLE = Ldr->InLoadOrderModuleList.Flink;
InitOrderMod = pLE->Blink;
pLdrModule = CONTAINING_RECORD(pLE,LDR_MODULE,InLoadOrderModuleList);
if(pLdrModule)
{
WideCharToMultiByte(CP_ACP,
0,
pLdrModule->BaseDllName.Buffer,
pLdrModule->BaseDllName.Length,
szModuleName,
16,
0,
0);
}
}
Posted by Dual


