|
현이 님이 쓰신 글 :
: 빌더님이 답변해주신 인디 FTP한글문제 답변 보고서 한방에 문제를 해결한 일인입니다 ^^
: 답변해주시는 글들 보면 내공이 높은 고수분이란걸 느끼게됩니다
: 다른게 아니구요 아래 글중에 엠바 IDE에서 실행중인지 알아내는 방법을 샘플코드로
: 올려주셨는데요 소스코드를 올려 주시면 안될까요
: 제가 콤포넌트를 하나 만들고 있는데 빌더님의 코드가 중요한 역할을 할거 같아서 그러거든요
: 수저를 쥐어줘도 알아서 떠먹지도 못하는 염치없는 부탁인줄은 알고있지만
: 빌더님 부탁 좀 드리겠습니다
답변) 소스코드 입니다...
<PstChk.cpp>
//---------------------------------------------------------------------------
#include <windows.h>
#include <psapi.h>
#include <string>
#include <assert.h>
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma comment(lib, "psapi.lib")
bool IsDebugger()
{
asm {
mov eax, fs:[0x18]
mov eax, dword ptr [eax + 0x30]
mov al, byte ptr [eax + 0x02]
and eax, 0xFF
}
return _EAX;
}
static std::string getFileName(const std::string &s)
{
char sep = '\\';
size_t i = s.rfind(sep, s.length( ));
if (i != std::string::npos) {
return(s.substr(i+1, s.length( ) - i));
}
return("");
}
typedef NTSTATUS (NTAPI *PFUNC)(HANDLE, INT, PVOID, ULONG, PULONG);
bool IsIDE()
{
DWORD dwLength = 0x18;
LPVOID pbuf = NULL;
bool retValue = false;
PFUNC pFunc;
pFunc = (PFUNC)GetProcAddress(GetModuleHandleA("ntdll.dll"), "NtQueryInformationProcess");
assert(pFunc);
pbuf = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwLength);
assert(pbuf);
NTSTATUS status = pFunc(GetCurrentProcess(), 0, pbuf, dwLength, &dwLength);
assert(!status);
HANDLE hProcess;
DWORD Access = PROCESS_QUERY_INFORMATION | PROCESS_VM_READ;
hProcess = OpenProcess(Access, FALSE, *PDWORD((PBYTE)pbuf + 0x14)) ;
char str[MAX_PATH];
GetProcessImageFileNameA(hProcess, str, sizeof(str));
if( strcmpi("bds.exe", getFileName(std::string(str)).c_str()) == 0)
retValue = true;
CloseHandle(hProcess);
HeapFree(GetProcessHeap(), 0, pbuf);
return retValue;
}
...
|