MCPcopy Create free account
hub / github.com/Schnocker/NoEye / Is64

Method Is64

NoEye_Service/CProcess.cpp:160–218  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

158 }
159
160 int CProcess::Is64(PBOOL Is64)
161 {
162 int Status = 1;
163 HANDLE hFile = INVALID_HANDLE_VALUE;
164 LPVOID lpFile = 0;
165 DWORD dwFileSize = 0, dwReaded = 0, dwSize = MAX_PATH;
166 PIMAGE_NT_HEADERS NtHeaders = 0;
167 char Path[MAX_PATH];
168 if (!QueryFullProcessImageNameA(this->hProcess, 0, Path, &dwSize) ||
169 !Is64)
170 {
171 Status = 2;
172 goto EXIT;
173 }
174 hFile = CreateFileA(Path, GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0);
175 if (!hFile || hFile == INVALID_HANDLE_VALUE)
176 {
177 Status = 3;
178 goto EXIT;
179 }
180 dwFileSize = GetFileSize(hFile, 0);
181 lpFile = VirtualAlloc(0, dwFileSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
182 if (!lpFile)
183 {
184 Status = 4;
185 goto EXIT;
186 };
187 if (!ReadFile(hFile, lpFile, dwFileSize, &dwReaded, 0))
188 {
189 Status = 5;
190 goto EXIT;
191 }
192 NtHeaders = reinterpret_cast<PIMAGE_NT_HEADERS>((reinterpret_cast<DWORD_PTR>(lpFile) + PIMAGE_DOS_HEADER(lpFile)->e_lfanew));
193 if (!NtHeaders ||
194 NtHeaders->Signature != IMAGE_NT_SIGNATURE)
195 {
196 Status = 6;
197 goto EXIT;
198 }
199 if (NtHeaders->FileHeader.Machine == IMAGE_FILE_MACHINE_AMD64 ||
200 NtHeaders->FileHeader.Machine == IMAGE_FILE_MACHINE_IA64)
201 {
202 *Is64 = true;
203 Status = 7;
204 goto EXIT;
205 }
206 if (NtHeaders->FileHeader.Machine == IMAGE_FILE_MACHINE_I386)
207 {
208 *Is64 = false;
209 Status = 7;
210 goto EXIT;
211 }
212 EXIT:
213 if(hFile)
214 CloseHandle(hFile);
215 if(lpFile)
216 VirtualFree(lpFile, dwFileSize, MEM_DECOMMIT);
217 return true;

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected