//--从当前进程模块程序读数据 //--参数 //--buf/接收数据的缓冲区 //--size/期望读入的数据字节数(buf必须足够) //--pos/开始读数据的偏移位置 //--返回 //--实际读入数据字节数(一般应该等于size) int accessME(char* buf, unsigned int size, unsigned int pos = 0) { int ret = 0; if (NULL == buf || size <= 0 || pos < 0) return ret;
HMODULE hModule = GetModuleHandle(NULL); char lpFilename[MAX_PATH] = {0}; ::GetModuleFileName(hModule, lpFilename, sizeof(lpFilename));
HANDLE hFile = ::CreateFile(lpFilename , GENERIC_READ , FILE_SHARE_READ , NULL , OPEN_EXISTING , FILE_FLAG_RANDOM_ACCESS , NULL); if (NULL != hFile && INVALID_HANDLE_VALUE != hFile) { DWORD dwSize = ::GetFileSize(hFile, NULL); if (pos > 0 && pos < dwSize) ::SetFilePointer(hFile, pos, NULL, FILE_BEGIN);
//--read DWORD dwRead = 0; ::ReadFile(hFile, buf, size, &dwRead, NULL); ::CloseHandle(hFile); ret = dwRead; }
return ret; }

|