diff --git a/Source/SlimDetours/Disasm.c b/Source/SlimDetours/Disasm.c
index 35cb4042..ded927fe 100644
--- a/Source/SlimDetours/Disasm.c
+++ b/Source/SlimDetours/Disasm.c
@@ -1579,21 +1579,6 @@ pp is like VEX but only instructions with 0 are defined
}
}
-PVOID NTAPI SlimDetoursCopyInstruction(
- _In_opt_ PVOID pDst,
- _Inout_opt_ PVOID* ppDstPool,
- _In_ PVOID pSrc,
- _Out_opt_ PVOID* ppTarget,
- _Out_opt_ LONG* plExtra)
-{
- UNREFERENCED_PARAMETER(ppDstPool); // x86 & x64 don't use a constant pool.
-
- DETOUR_DISASM Disasm;
-
- detour_disasm_init(&Disasm, (PBYTE*)ppTarget, plExtra);
- return CopyInstruction(&Disasm, (PBYTE)pDst, (PBYTE)pSrc);
-}
-
#endif // defined(_M_X64) || defined(_M_IX86)
#if defined(_M_ARM64)
@@ -2324,23 +2309,27 @@ static PBYTE CopyInstruction(_In_ PDETOUR_DISASM pDisasm, _In_opt_ PBYTE pDst, _
return pSrc + 4;
}
+#endif // defined(_M_ARM64)
+
PVOID NTAPI SlimDetoursCopyInstruction(
_In_opt_ PVOID pDst,
- _Inout_opt_ PVOID* ppDstPool,
_In_ PVOID pSrc,
_Out_opt_ PVOID* ppTarget,
_Out_opt_ LONG* plExtra)
{
- UNREFERENCED_PARAMETER(ppDstPool);
-
DETOUR_DISASM Disasm;
+#if defined(_M_X64) || defined(_M_IX86)
+ detour_disasm_init(&Disasm, (PBYTE*)ppTarget, plExtra);
+ return (PVOID)CopyInstruction(&Disasm, (PBYTE)pDst, (PBYTE)pSrc);
+#elif defined(_M_ARM64)
detour_disasm_init(&Disasm);
return (PVOID)CopyInstruction(&Disasm,
(PBYTE)pDst,
(PBYTE)pSrc,
(PBYTE*)ppTarget,
plExtra);
+#else
+ return NULL;
+#endif
}
-
-#endif // defined(_M_ARM64)
diff --git a/Source/SlimDetours/Memory.c b/Source/SlimDetours/Memory.c
index a0571804..6f1f276a 100644
--- a/Source/SlimDetours/Memory.c
+++ b/Source/SlimDetours/Memory.c
@@ -79,13 +79,16 @@ VOID detour_memory_init()
}
#endif
- g_hHeap = RtlCreateHeap(HEAP_NO_SERIALIZE | HEAP_GROWABLE, NULL, 0, 0, NULL, NULL);
+ if (g_hHeap == NULL)
+ {
+ g_hHeap = RtlCreateHeap(HEAP_NO_SERIALIZE | HEAP_GROWABLE, NULL, 0, 0, NULL, NULL);
+ }
}
_Must_inspect_result_
_Ret_maybenull_
_Post_writable_byte_size_(Size)
-PVOID detour_memory_alloc(_In_range_(>, 0) SIZE_T Size)
+PVOID detour_memory_alloc(_In_ SIZE_T Size)
{
if (g_hHeap == NULL)
{
diff --git a/Source/SlimDetours/SlimDetours.h b/Source/SlimDetours/SlimDetours.h
index c0ae0a85..52bd7a5d 100644
--- a/Source/SlimDetours/SlimDetours.h
+++ b/Source/SlimDetours/SlimDetours.h
@@ -52,7 +52,6 @@ NTSTATUS NTAPI SlimDetoursDelayAttach(
PVOID NTAPI SlimDetoursCodeFromPointer(_In_ PVOID pPointer);
PVOID NTAPI SlimDetoursCopyInstruction(
_In_opt_ PVOID pDst,
- _Inout_opt_ PVOID* ppDstPool,
_In_ PVOID pSrc,
_Out_opt_ PVOID* ppTarget,
_Out_opt_ LONG* plExtra);
diff --git a/Source/SlimDetours/SlimDetours.inl b/Source/SlimDetours/SlimDetours.inl
index ccc250d5..7baa7229 100644
--- a/Source/SlimDetours/SlimDetours.inl
+++ b/Source/SlimDetours/SlimDetours.inl
@@ -124,7 +124,7 @@ VOID detour_memory_init();
_Must_inspect_result_
_Ret_maybenull_
_Post_writable_byte_size_(Size)
-PVOID detour_memory_alloc(_In_range_(> , 0) SIZE_T Size);
+PVOID detour_memory_alloc(_In_ SIZE_T Size);
BOOL detour_memory_free(_Frees_ptr_ PVOID BaseAddress);
diff --git a/Source/SlimDetours/Thread.c b/Source/SlimDetours/Thread.c
index 410440a4..8c3ea74e 100644
--- a/Source/SlimDetours/Thread.c
+++ b/Source/SlimDetours/Thread.c
@@ -139,7 +139,6 @@ NTSTATUS detour_thread_update(_In_ HANDLE ThreadHandle, _In_ PDETOUR_OPERATION P
if (cxt.CONTEXT_PC >= (ULONG_PTR)o->pTrampoline &&
cxt.CONTEXT_PC < ((ULONG_PTR)o->pTrampoline + sizeof(o->pTrampoline)))
{
-
cxt.CONTEXT_PC = (ULONG_PTR)o->pbTarget +
detour_align_from_trampoline(o->pTrampoline, (BYTE)(cxt.CONTEXT_PC - (ULONG_PTR)o->pTrampoline));
bUpdateContext = TRUE;
@@ -149,7 +148,6 @@ NTSTATUS detour_thread_update(_In_ HANDLE ThreadHandle, _In_ PDETOUR_OPERATION P
if (cxt.CONTEXT_PC >= (ULONG_PTR)o->pbTarget &&
cxt.CONTEXT_PC < ((ULONG_PTR)o->pbTarget + o->pTrampoline->cbRestore))
{
-
cxt.CONTEXT_PC = (ULONG_PTR)o->pTrampoline +
detour_align_from_target(o->pTrampoline, (BYTE)(cxt.CONTEXT_PC - (ULONG_PTR)o->pbTarget));
bUpdateContext = TRUE;
diff --git a/Source/SlimDetours/Transaction.c b/Source/SlimDetours/Transaction.c
index 48d77725..8e731e89 100644
--- a/Source/SlimDetours/Transaction.c
+++ b/Source/SlimDetours/Transaction.c
@@ -323,7 +323,7 @@ NTSTATUS NTAPI SlimDetoursAttach(_Inout_ PVOID* ppPointer, _In_ PVOID pDetour)
LONG lExtra = 0;
DETOUR_TRACE(" SlimDetoursCopyInstruction(%p,%p)\n", pbTrampoline, pbSrc);
- pbSrc = (PBYTE)SlimDetoursCopyInstruction(pbTrampoline, (PVOID*)&pbPool, pbSrc, NULL, &lExtra);
+ pbSrc = (PBYTE)SlimDetoursCopyInstruction(pbTrampoline, pbSrc, NULL, &lExtra);
DETOUR_TRACE(" SlimDetoursCopyInstruction() = %p (%d bytes)\n", pbSrc, (int)(pbSrc - pbOp));
pbTrampoline += (pbSrc - pbOp) + lExtra;
cbTarget = PtrOffset(pbTarget, pbSrc);
diff --git a/Source/Test/Main.cpp b/Source/Test/Main.cpp
index 554a0dff..e749da78 100644
--- a/Source/Test/Main.cpp
+++ b/Source/Test/Main.cpp
@@ -49,11 +49,7 @@ static VOID CALLBACK Delay_attach_proc(
}
}
-int WINAPI wWinMain(
- _In_ HINSTANCE hInstance,
- _In_opt_ HINSTANCE hPrevInstance,
- _In_ LPWSTR lpCmdLine,
- _In_ int nShowCmd)
+int wmain()
{
NTSTATUS Status;
PVOID User32Base;
@@ -61,14 +57,15 @@ int WINAPI wWinMain(
#if 1 // Test delay attach
FN_MessageBoxW* pfnMessageBoxW;
- if (!NT_SUCCESS(SlimDetoursDelayAttach((PVOID*)&g_pfnMessageBoxW,
+ Status = SlimDetoursDelayAttach((PVOID*)&g_pfnMessageBoxW,
Hooked_MessageBoxW,
g_usUser32.Buffer,
g_asMessageBoxW.Buffer,
Delay_attach_proc,
- NULL)))
+ NULL);
+ if (!NT_SUCCESS(Status))
{
- return STATUS_UNSUCCESSFUL;
+ return Status;
}
if (!NT_SUCCESS(LdrLoadDll(NULL, NULL, &g_usUser32, &User32Base)) ||
diff --git a/Source/Test/Test.vcxproj b/Source/Test/Test.vcxproj
index 12cdb4ec..034453b9 100644
--- a/Source/Test/Test.vcxproj
+++ b/Source/Test/Test.vcxproj
@@ -119,7 +119,7 @@
true
- Windows
+ Console
@@ -130,7 +130,7 @@
true
- Windows
+ Console
@@ -143,7 +143,7 @@
true
- Windows
+ Console
true
true
@@ -158,7 +158,7 @@
true
- Windows
+ Console
true
true
@@ -171,7 +171,7 @@
true
- Windows
+ Console
@@ -184,7 +184,7 @@
true
- Windows
+ Console
true
true