mirror of
https://github.com/radareorg/radare2.git
synced 2025-03-03 19:59:09 +00:00
Fix io.r2k build on mingw
This commit is contained in:
parent
3c8e49e67e
commit
8d5e5d4add
@ -1,10 +1,10 @@
|
||||
/* io_r2k- LGPL - Copyright SkUaTeR 2016*/
|
||||
/* io_r2k - radare2 - LGPL - Copyright SkUaTeR 2016 */
|
||||
|
||||
#include "r_io.h"
|
||||
#include "r_lib.h"
|
||||
#include <r_io.h>
|
||||
#include <r_lib.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#if __WINDOWS__
|
||||
#include <sys/types.h>
|
||||
|
||||
typedef struct {
|
||||
HANDLE hnd;
|
||||
@ -33,22 +33,29 @@ typedef struct _RTL_PROCESS_MODULES {
|
||||
RTL_PROCESS_MODULE_INFORMATION Modules[1];
|
||||
} RTL_PROCESS_MODULES, *PRTL_PROCESS_MODULES;
|
||||
|
||||
#define strDeviceName "\\\\.\\r2k\\"
|
||||
#define CLOSE_DRIVER CTL_CODE(FILE_DEVICE_UNKNOWN, 0x803, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
|
||||
#define IOCTL_READ_PHYS_MEM CTL_CODE(FILE_DEVICE_UNKNOWN, 0x807, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
|
||||
#define IOCTL_READ_KERNEL_MEM CTL_CODE(FILE_DEVICE_UNKNOWN, 0x804, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
|
||||
#define IOCTL_WRITE_KERNEL_MEM CTL_CODE(FILE_DEVICE_UNKNOWN, 0x805, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
|
||||
#define IOCTL_GET_PHYSADDR CTL_CODE(FILE_DEVICE_UNKNOWN, 0x809, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
|
||||
#define IOCTL_WRITE_PHYS_MEM CTL_CODE(FILE_DEVICE_UNKNOWN, 0x808, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
|
||||
#define IOCTL_GET_SYSTEM_MODULES CTL_CODE(FILE_DEVICE_UNKNOWN, 0x80a, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
|
||||
#define R2K_DEVICE "\\\\.\\r2k\\"
|
||||
|
||||
#define IOCTL_CODE(DeviceType, Function, Method, Access) \
|
||||
(((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method))
|
||||
#if 0
|
||||
FILE_DEVICE_UNKNOWN 0x22
|
||||
FILE_READ_ACCESS 1
|
||||
FILE_WRITE_ACCESS 2
|
||||
#endif
|
||||
#define CLOSE_DRIVER IOCTL_CODE(0x22, 0x803, 0, 1 | 2)
|
||||
#define IOCTL_READ_PHYS_MEM IOCTL_CODE(0x22, 0x807, 0, 1 | 2)
|
||||
#define IOCTL_READ_KERNEL_MEM IOCTL_CODE(0x22, 0x804, 0, 1 | 2)
|
||||
#define IOCTL_WRITE_KERNEL_MEM IOCTL_CODE(0x22, 0x805, 0, 1 | 2)
|
||||
#define IOCTL_GET_PHYSADDR IOCTL_CODE(0x22, 0x809, 0, 1 | 2)
|
||||
#define IOCTL_WRITE_PHYS_MEM IOCTL_CODE(0x22, 0x808, 0, 1 | 2)
|
||||
#define IOCTL_GET_SYSTEM_MODULES IOCTL_CODE(0x22, 0x80a, 0, 1 | 2)
|
||||
|
||||
static HANDLE gHandleDriver = NULL;
|
||||
|
||||
static BOOL InstallService(const char * rutaDriver, LPCSTR lpServiceName, LPCSTR lpDisplayName) {
|
||||
HANDLE hSCManager;
|
||||
HANDLE hService;
|
||||
BOOL ret = FALSE;
|
||||
hSCManager = OpenSCManagerA (NULL, NULL, SC_MANAGER_CREATE_SERVICE);
|
||||
HANDLE hSCManager = OpenSCManagerA (NULL, NULL, SC_MANAGER_CREATE_SERVICE);
|
||||
if (hSCManager) {
|
||||
hService = CreateServiceA (hSCManager, lpServiceName, lpDisplayName, SERVICE_START | DELETE | SERVICE_STOP, SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START, SERVICE_ERROR_IGNORE, rutaDriver, NULL, NULL, NULL, NULL, NULL);
|
||||
if (hService) {
|
||||
@ -61,11 +68,9 @@ static BOOL InstallService(const char * rutaDriver, LPCSTR lpServiceName, LPCST
|
||||
}
|
||||
|
||||
static BOOL RemoveService(LPCSTR lpServiceName) {
|
||||
HANDLE hSCManager;
|
||||
HANDLE hService;
|
||||
BOOL ret = FALSE;
|
||||
|
||||
hSCManager = OpenSCManagerA (NULL, NULL, SC_MANAGER_CREATE_SERVICE);
|
||||
HANDLE hSCManager = OpenSCManagerA (NULL, NULL, SC_MANAGER_CREATE_SERVICE);
|
||||
if (hSCManager) {
|
||||
hService = OpenServiceA (hSCManager, lpServiceName, SERVICE_START | DELETE | SERVICE_STOP);
|
||||
if (hService) {
|
||||
@ -91,16 +96,15 @@ static BOOL StartStopService(LPCSTR lpServiceName, BOOL bStop) {
|
||||
if (StartServiceA (hService, 0, NULL)) {
|
||||
eprintf ("Service started [OK]\n");
|
||||
ret = TRUE;
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
eprintf ("Service started [FAIL]\n");
|
||||
}
|
||||
} else {
|
||||
if (ControlService (hService, SERVICE_CONTROL_STOP, &ssStatus)) {
|
||||
printf ("Service Stopped [OK]\n");
|
||||
eprintf ("Service Stopped [OK]\n");
|
||||
ret = TRUE;
|
||||
} else {
|
||||
printf ("Service Stopped [FAIL]\n");
|
||||
eprintf ("Service Stopped [FAIL]\n");
|
||||
}
|
||||
}
|
||||
CloseServiceHandle (hService);
|
||||
@ -111,17 +115,16 @@ static BOOL StartStopService(LPCSTR lpServiceName, BOOL bStop) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
static BOOL InitDriver(VOID)
|
||||
{
|
||||
gHandleDriver = CreateFileA (strDeviceName, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_DIRECTORY, 0);
|
||||
if (gHandleDriver != INVALID_HANDLE_VALUE) {
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
static BOOL InitDriver(VOID) {
|
||||
const int genericFlags = GENERIC_READ | GENERIC_WRITE;
|
||||
const int shareFlags = FILE_SHARE_READ | FILE_SHARE_WRITE;
|
||||
gHandleDriver = CreateFileA (R2K_DEVICE, genericFlags, shareFlags,
|
||||
NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_DIRECTORY, 0);
|
||||
return (gHandleDriver != INVALID_HANDLE_VALUE);
|
||||
}
|
||||
|
||||
static char *GetFileName(unsigned char *path) {
|
||||
char *pfile = path + strlen (path);
|
||||
static const char *GetFileName(const char *path) {
|
||||
const char *pfile = path + strlen (path);
|
||||
for (; pfile > path; pfile--) {
|
||||
if ((*pfile == '\\') || (*pfile == '/')) {
|
||||
pfile++;
|
||||
@ -145,8 +148,8 @@ static int GetSystemModules(RIO *io) {
|
||||
PRTL_PROCESS_MODULES pm = (PRTL_PROCESS_MODULES)lpBufMods;
|
||||
PRTL_PROCESS_MODULE_INFORMATION pMod = pm->Modules;
|
||||
for (i = 0; i < pm->NumberOfModules; i++) {
|
||||
//eprintf("%p %x = %-50s \n", pMod[i].ImageBase, pMod[i].ImageBase, GetFileName(pMod[i].FullPathName));
|
||||
io->cb_printf ("f nt.%s 0x%x @ 0x%p\n", GetFileName(pMod[i].FullPathName), pMod[i].ImageSize, pMod[i].ImageBase);
|
||||
const char *fileName = GetFileName((const char*)pMod[i].FullPathName);
|
||||
io->cb_printf ("f nt.%s 0x%x @ 0x%p\n", fileName, pMod[i].ImageSize, pMod[i].ImageBase);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@ -179,7 +182,7 @@ static int ReadKernelMemory (ut64 address, ut8 *buf, int len) {
|
||||
}
|
||||
free (lpBuffer);
|
||||
} else {
|
||||
eprintf("Driver not initialized.\n");
|
||||
eprintf ("Driver not initialized.\n");
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
@ -257,7 +260,7 @@ static int r2k__read(RIO *io, RIODesc *fd, ut8 *buf, int count) {
|
||||
|
||||
static int r2k__close(RIODesc *fd) {
|
||||
#if __WINDOWS__
|
||||
if(gHandleDriver) {
|
||||
if (gHandleDriver) {
|
||||
CloseHandle (gHandleDriver);
|
||||
StartStopService ("r2k",TRUE);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user