#pragma once #include /// /// Allocate new Unicode string from Paged pool /// /// Resulting string /// Buffer size in bytes to alloacate /// Status code NTSTATUS BBSafeAllocateString( OUT PUNICODE_STRING result, IN USHORT size ); /// /// Allocate and copy string /// /// Resulting string /// Source string /// Status code NTSTATUS BBSafeInitString( OUT PUNICODE_STRING result, IN PUNICODE_STRING source ); /// /// Search for substring /// /// Source string /// Target string /// Case insensitive search /// Found position or -1 if not found LONG BBSafeSearchString( IN PUNICODE_STRING source, IN PUNICODE_STRING target, IN BOOLEAN CaseInSensitive ); /// /// Get file name from full path /// /// Path. /// Resulting name /// Status code NTSTATUS BBStripPath( IN PUNICODE_STRING path, OUT PUNICODE_STRING name ); /// /// Get directory path name from full path /// /// Path /// Resulting directory path /// Status code NTSTATUS BBStripFilename( IN PUNICODE_STRING path, OUT PUNICODE_STRING dir ); /// /// Check if file exists /// /// Fully qualifid path to a file /// Status code NTSTATUS BBFileExists( IN PUNICODE_STRING path ); /// /// Search for pattern /// /// Pattern to search for /// Used wildcard /// Pattern length /// Base address for searching /// Address range to search in /// Found location /// Status code NTSTATUS BBSearchPattern( IN PCUCHAR pattern, IN UCHAR wildcard, IN ULONG_PTR len, IN const VOID* base, IN ULONG_PTR size, OUT PVOID* ppFound ); /// /// Setup image security cookie /// /// Image base /// Status code NTSTATUS BBCreateCookie( IN PVOID imageBase ); /// /// Check if process is terminating /// /// Process /// If TRUE - terminating BOOLEAN BBCheckProcessTermination( PEPROCESS pProcess ); // // Machine code generation routines // ULONG GenPrologue32( IN PUCHAR pBuf ); ULONG GenEpilogue32( IN PUCHAR pBuf, IN INT retSize ); ULONG GenCall32( IN PUCHAR pBuf, IN PVOID pFn, IN INT argc, ... ); ULONG GenCall32V( IN PUCHAR pBuf, IN PVOID pFn, IN INT argc, IN va_list vl ); ULONG GenSync32( IN PUCHAR pBuf, IN PNTSTATUS pStatus, IN PVOID pSetEvent, IN HANDLE hEvent ); ULONG GenPrologue64( IN PUCHAR pBuf ); ULONG GenEpilogue64( IN PUCHAR pBuf, IN INT retSize ); ULONG GenCall64( IN PUCHAR pBuf, IN PVOID pFn, INT argc, ... ); ULONG GenCall64V( IN PUCHAR pBuf, IN PVOID pFn, INT argc, va_list vl ); ULONG GenSync64( IN PUCHAR pBuf, IN PNTSTATUS pStatus, IN PVOID pSetEvent, IN HANDLE hEvent ); ULONG GenPrologueT( IN BOOLEAN wow64, IN PUCHAR pBuf ); ULONG GenEpilogueT( IN BOOLEAN wow64, IN PUCHAR pBuf, IN INT retSize ); ULONG GenCallT( IN BOOLEAN wow64, IN PUCHAR pBuf, IN PVOID pFn, IN INT argc, ... ); ULONG GenCallTV( IN BOOLEAN wow64, IN PUCHAR pBuf, IN PVOID pFn, IN INT argc, IN va_list vl ); ULONG GenSyncT( IN BOOLEAN wow64, IN PUCHAR pBuf, IN PNTSTATUS pStatus, IN PVOID pSetEvent, IN HANDLE hEvent );