Skip to content

Instantly share code, notes, and snippets.

@yajd
Last active August 29, 2015 14:02
Show Gist options
  • Save yajd/01616e237e743a7a560d to your computer and use it in GitHub Desktop.
Save yajd/01616e237e743a7a560d to your computer and use it in GitHub Desktop.
_ff-addon-snippet-JSCTypesKernel - Setting up JS CTypes so can bypass that WinXP crashing issue on TB_BUTTON.
Cu.import('resource://gre/modules/ctypes.jsm');
var kernel32 = ctypes.open('kernel32.dll');
var user32 = ctypes.open('user32.dll');
/* http://msdn.microsoft.com/en-us/library/windows/desktop/ms684320%28v=vs.85%29.aspx
* HANDLE WINAPI OpenProcess(
* __in_ DWORD dwDesiredAccess,
* __in_ BOOL bInheritHandle,
* __in_ DWORD dwProcessId
* );
*/
var OpenProcess = kernel32.declare('OpenProcess', ctypes.winapi_abi, ctypes.voidptr_t, //HANDLE
ctypes.unsigned_long, //DWORD
ctypes.bool, //BOOL
ctypes.unsigned_long //DWORD
);
/* http://msdn.microsoft.com/en-us/library/windows/desktop/aa366890%28v=vs.85%29.aspx
* LPVOID WINAPI VirtualAllocEx(
* __in_ HANDLE hProcess,
* __in_opt_ LPVOID lpAddress,
* __in_ SIZE_T dwSize,
* __in_ DWORD flAllocationType,
* __in_ DWORD flProtect
* );
*/
var VirtualAllocEx = kernel32.declare('VirtualAllocEx', ctypes.winapi_abi, ctypes.voidptr_t, //LPVOID
ctypes.voidptr_t, //HANDLE
ctypes.voidptr_t, //LPVOID
ctypes.voidptr_t.size == 8 ? ctypes.uint64_t : ctypes.unsigned_long, //SIZE_T
ctypes.unsigned_long, //DWORD
ctypes.unsigned_long //DWORD
);
/* http://msdn.microsoft.com/en-us/library/windows/desktop/ms681674%28v=vs.85%29.aspx
* BOOL WINAPI WriteProcessMemory(
* __in_ HANDLE hProcess,
* __in_ LPVOID lpBaseAddress,
* __in_ LPCVOID lpBuffer,
* __in_ SIZE_T nSize,
* __out_ SIZE_T *lpNumberOfBytesWritten
* );
*/
var WriteProcessMemory = kernel32.declare('WriteProcessMemory', ctypes.winapi_abi, ctypes.bool, //BOOL
ctypes.voidptr_t, //HANDLE
ctypes.voidptr_t, //LPVOID
ctypes.char.ptr, //LPCVOID
ctypes.voidptr_t.size == 8 ? ctypes.uint64_t : ctypes.unsigned_long, //SIZE_T
ctypes.voidptr_t.size == 8 ? ctypes.uint64_t : ctypes.unsigned_long //SIZE_T
);
/* http://msdn.microsoft.com/en-us/library/windows/desktop/ms680553%28v=vs.85%29.aspx
* BOOL WINAPI ReadProcessMemory(
* __in_ HANDLE hProcess,
* __in_ LPCVOID lpBaseAddress,
* __out_ LPVOID lpBuffer,
* __in_ SIZE_T nSize,
* __out_ SIZE_T *lpNumberOfBytesRead
* );
*/
var ReadProcessMemory = kernel32.declare('ReadProcessMemory', ctypes.winapi_abi, ctypes.bool, //BOOL
ctypes.voidptr_t, //HANDLE
ctypes.char.ptr, //LPCVOID
ctypes.voidptr_t, //LPVOID
ctypes.voidptr_t.size == 8 ? ctypes.uint64_t : ctypes.unsigned_long, //SIZE_T
ctypes.voidptr_t.size == 8 ? ctypes.uint64_t : ctypes.unsigned_long //SIZE_T
);
/* http://msdn.microsoft.com/en-us/library/windows/desktop/aa366894%28v=vs.85%29.aspx
* BOOL WINAPI VirtualFreeEx(
* __in_ HANDLE hProcess,
* __in_ LPVOID lpAddress,
* __in_ SIZE_T dwSize,
* __in_ DWORD dwFreeType
* );
*/
var VirtualFreeEx = kernel32.declare('VirtualFreeEx', ctypes.winapi_abi, ctypes.bool, //BOOL
ctypes.voidptr_t, //HANDLE
ctypes.voidptr_t, //LPVOID
ctypes.voidptr_t.size == 8 ? ctypes.uint64_t : ctypes.unsigned_long, //SIZE_T
ctypes.unsigned_long //DWORD
);
/* http://msdn.microsoft.com/en-us/library/windows/desktop/ms633522%28v=vs.85%29.aspx
* DWORD WINAPI GetWindowThreadProcessId(
* __in_ HWND hWnd,
* __out_opt_ LPDWORD lpdwProcessId
* );
*/
var GetWindowThreadProcessId = user32.declare('GetWindowThreadProcessId', ctypes.winapi_abi, ctypes.unsigned_long, //DWORD
ctypes.voidptr_t, //HWND
ctypes.unsigned_long.ptr //LPDWORD
);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment