Quick links:
BoxedApp Home Page
| Buy license
| Welcome to our forum!
| Ask your question
| Help on the Web
BoxedApp Packer Help >> Plugin API >> Functions BoxedAppSDK_HookFunction
Description
Creates a hook (pHook) to intercept the specified function (pFunction). If the function succeeds, the return value is a handle of the hook. If the function fails, the return value is NULL. If bEnable is TRUE, the hook activated immediately. If bEnable is FALSE, you can enable the hook later. To disable / enable a hook use BoxedAppSDK_EnableHook You can call the original function if you need, to get the address use BoxedAppSDK_GetOriginalFunction When you don't need the hook, remove it using BoxedAppSDK_UnhookFunction Syntax
[ C++ ]
HANDLE BoxedAppSDK_HookFunction(PVOID pFunction, PVOID pHook, BOOL bEnable);
[ Delphi ]
function BoxedAppSDK_HookFunction(pFunction: Pointer; pHook: : Pointer; bEnable: BOOL): THandle; Example of how to intercept CreateFile from kernel32.dll to prevent creating file "1.txt":
[ C++ ]
typedef HANDLE (WINAPI *P_CreateFileW)( LPCWSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile); P_CreateFileW g_pCreateFileW; HANDLE WINAPI My_CreateFileW( LPCWSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile) { if (0 == lstrcmpiW(lpFileName, L"1.txt")) { SetLastError(ERROR_FILE_EXISTS); return INVALID_HANDLE_VALUE; } else return g_pCreateFileW( lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile); } ... BoxedAppSDK_Init(); PVOID pCreateFileW = GetProcAddress(GetModuleHandle(_T("kernel32.dll")), "CreateFileW"); HANDLE hHook__CreateFileW = BoxedAppSDK_HookFunction(pCreateFileW, &My_CreateFileW, TRUE); g_pCreateFileW = (P_CreateFileW)BoxedAppSDK_GetOriginalFunction(hHook__CreateFileW); FILE* f = fopen("1.txt", "r"); // f is NULL ... BoxedAppSDK_UnhookFunction(hHook__CreateFileW); The same sample in Delphi:
[ Delphi ]
type TCreateFileW = function(lpFileName: PWideChar; dwDesiredAccess, dwShareMode: Integer; lpSecurityAttributes: PSecurityAttributes; dwCreationDisposition, dwFlagsAndAttributes: DWORD; hTemplateFile: THandle): THandle; stdcall; var OriginalCreateFileW: TCreateFileW; function My_CreateFileW( lpFileName: PWideChar; dwDesiredAccess, dwShareMode: Integer; lpSecurityAttributes: PSecurityAttributes; dwCreationDisposition, dwFlagsAndAttributes: DWORD; hTemplateFile: THandle): THandle; stdcall; begin if 0 = lstrcmpiW(lpFileName, '1.txt') then begin Result := INVALID_HANDLE_VALUE; SetLastError(ERROR_ALREADY_EXISTS); end else Result := OriginalCreateFileW( lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile); end; var pCreateFileW: Pointer; hHook__CreateFileW: THandle; begin Application.Initialize; BoxedAppSDK_Init; pCreateFileW := GetProcAddress(GetModuleHandle('kernel32.dll'), 'CreateFileW'); hHook__CreateFileW := BoxedAppSDK_HookFunction(pCreateFileW, @My_CreateFileW, TRUE); OriginalCreateFileW := BoxedAppSDK_GetOriginalFunction(hHook__CreateFileW); // This line produces an exception because we prevent creating / opening '1.txt' TFileStream.Create('1.txt', fmCreate or fmOpenRead); BoxedAppSDK_UnhookFunction(hHook__CreateFileW); end.
Quick links:
BoxedApp Home Page
| Buy license
| Welcome to our forum!
| Ask your question
| Help on the Web
|