diff options
Diffstat (limited to 'samples/dtest/dtarge.cpp')
-rw-r--r-- | samples/dtest/dtarge.cpp | 306 |
1 files changed, 306 insertions, 0 deletions
diff --git a/samples/dtest/dtarge.cpp b/samples/dtest/dtarge.cpp new file mode 100644 index 0000000..2cd4534 --- /dev/null +++ b/samples/dtest/dtarge.cpp @@ -0,0 +1,306 @@ +////////////////////////////////////////////////////////////////////////////// +// +// Detours Test Program (dtarge.dll) +// +// Microsoft Research Detours Package +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +#include <stdio.h> +#include <windows.h> +#include "dtarge.h" + +DWORD_PTR WINAPI Target0() +{ + printf(" Target0 ()\n"); + return 1000; +} + +DWORD_PTR WINAPI Target1(DWORD_PTR v1) +{ + printf(" Target1 (%ld)\n", + (DWORD)v1); + return 1001; +} + +DWORD_PTR WINAPI Target2(DWORD_PTR v1, DWORD_PTR v2) +{ + printf(" Target2 (%ld,%ld)\n", + (DWORD)v1, (DWORD)v2); + return 1002; +} + +DWORD_PTR WINAPI Target3(DWORD_PTR v1, DWORD_PTR v2, DWORD_PTR v3) +{ + printf(" Target3 (%ld,%ld,%ld)\n", + (DWORD)v1, (DWORD)v2, (DWORD)v3); + return 1003; +} + +DWORD_PTR WINAPI Target4(DWORD_PTR v1, DWORD_PTR v2, DWORD_PTR v3, DWORD_PTR v4) +{ + printf(" Target4 (%ld,%ld,%ld,%ld)\n", + (DWORD)v1, (DWORD)v2, (DWORD)v3, (DWORD)v4); + return 1004; +} + +DWORD_PTR WINAPI Target5(DWORD_PTR v1, DWORD_PTR v2, DWORD_PTR v3, DWORD_PTR v4, + DWORD_PTR v5) +{ + printf(" Target5 (%ld,%ld,%ld,%ld,%ld)\n", + (DWORD)v1, (DWORD)v2, (DWORD)v3, (DWORD)v4, + (DWORD)v5); + return 1005; +} + +DWORD_PTR WINAPI Target6(DWORD_PTR v1, DWORD_PTR v2, DWORD_PTR v3, DWORD_PTR v4, + DWORD_PTR v5, DWORD_PTR v6) +{ + printf(" Target6 (%ld,%ld,%ld,%ld,%ld,%ld)\n", + (DWORD)v1, (DWORD)v2, (DWORD)v3, (DWORD)v4, + (DWORD)v5, (DWORD)v6); + return 1006; +} + +DWORD_PTR WINAPI Target7(DWORD_PTR v1, DWORD_PTR v2, DWORD_PTR v3, DWORD_PTR v4, + DWORD_PTR v5, DWORD_PTR v6, DWORD_PTR v7) +{ + printf(" Target7 (%ld,%ld,%ld,%ld,%ld,%ld,%ld)\n", + (DWORD)v1, (DWORD)v2, (DWORD)v3, (DWORD)v4, + (DWORD)v5, (DWORD)v6, (DWORD)v7); + return 1007; +} + +DWORD_PTR WINAPI Target8(DWORD_PTR v1, DWORD_PTR v2, DWORD_PTR v3, DWORD_PTR v4, + DWORD_PTR v5, DWORD_PTR v6, DWORD_PTR v7, DWORD_PTR v8) +{ + printf(" Target8 (%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld)\n", + (DWORD)v1, (DWORD)v2, (DWORD)v3, (DWORD)v4, + (DWORD)v5, (DWORD)v6, (DWORD)v7, (DWORD)v8); + return 1008; +} + +DWORD_PTR WINAPI Target9(DWORD_PTR v1, DWORD_PTR v2, DWORD_PTR v3, DWORD_PTR v4, + DWORD_PTR v5, DWORD_PTR v6, DWORD_PTR v7, DWORD_PTR v8, + DWORD_PTR v9) +{ + printf(" Target9 (%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld)\n", + (DWORD)v1, (DWORD)v2, (DWORD)v3, (DWORD)v4, + (DWORD)v5, (DWORD)v6, (DWORD)v7, (DWORD)v8, + (DWORD)v9); + return 1009; +} + +DWORD_PTR WINAPI Target10(DWORD_PTR v1, DWORD_PTR v2, DWORD_PTR v3, DWORD_PTR v4, + DWORD_PTR v5, DWORD_PTR v6, DWORD_PTR v7, DWORD_PTR v8, + DWORD_PTR v9, DWORD_PTR v10) +{ + printf(" Target10(%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld)\n", + (DWORD)v1, (DWORD)v2, (DWORD)v3, (DWORD)v4, + (DWORD)v5, (DWORD)v6, (DWORD)v7, (DWORD)v8, + (DWORD)v9, (DWORD)v10); + return 1010; +} + +DWORD_PTR WINAPI Target11(DWORD_PTR v1, DWORD_PTR v2, DWORD_PTR v3, DWORD_PTR v4, + DWORD_PTR v5, DWORD_PTR v6, DWORD_PTR v7, DWORD_PTR v8, + DWORD_PTR v9, DWORD_PTR v10, DWORD_PTR v11) +{ + printf(" Target11(%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld)\n", + (DWORD)v1, (DWORD)v2, (DWORD)v3, (DWORD)v4, + (DWORD)v5, (DWORD)v6, (DWORD)v7, (DWORD)v8, + (DWORD)v9, (DWORD)v10, (DWORD)v11); + return 1011; +} + +DWORD_PTR WINAPI Target12(DWORD_PTR v1, DWORD_PTR v2, DWORD_PTR v3, DWORD_PTR v4, + DWORD_PTR v5, DWORD_PTR v6, DWORD_PTR v7, DWORD_PTR v8, + DWORD_PTR v9, DWORD_PTR v10, DWORD_PTR v11, DWORD_PTR v12) +{ + printf(" Target12(%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld)\n", + (DWORD)v1, (DWORD)v2, (DWORD)v3, (DWORD)v4, + (DWORD)v5, (DWORD)v6, (DWORD)v7, (DWORD)v8, + (DWORD)v9, (DWORD)v10, (DWORD)v11, (DWORD)v12); + return 1012; +} + +DWORD_PTR WINAPI Target13(DWORD_PTR v1, DWORD_PTR v2, DWORD_PTR v3, DWORD_PTR v4, + DWORD_PTR v5, DWORD_PTR v6, DWORD_PTR v7, DWORD_PTR v8, + DWORD_PTR v9, DWORD_PTR v10, DWORD_PTR v11, DWORD_PTR v12, + DWORD_PTR v13) +{ + printf(" Target13(%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld)\n", + (DWORD)v1, (DWORD)v2, (DWORD)v3, (DWORD)v4, + (DWORD)v5, (DWORD)v6, (DWORD)v7, (DWORD)v8, + (DWORD)v9, (DWORD)v10, (DWORD)v11, (DWORD)v12, + (DWORD)v13); + return 1013; +} + +DWORD_PTR WINAPI Target14(DWORD_PTR v1, DWORD_PTR v2, DWORD_PTR v3, DWORD_PTR v4, + DWORD_PTR v5, DWORD_PTR v6, DWORD_PTR v7, DWORD_PTR v8, + DWORD_PTR v9, DWORD_PTR v10, DWORD_PTR v11, DWORD_PTR v12, + DWORD_PTR v13, DWORD_PTR v14) +{ + printf(" Target14(%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld)\n", + (DWORD)v1, (DWORD)v2, (DWORD)v3, (DWORD)v4, + (DWORD)v5, (DWORD)v6, (DWORD)v7, (DWORD)v8, + (DWORD)v9, (DWORD)v10, (DWORD)v11, (DWORD)v12, + (DWORD)v13, (DWORD)v14); + return 1014; +} + +DWORD_PTR WINAPI Target15(DWORD_PTR v1, DWORD_PTR v2, DWORD_PTR v3, DWORD_PTR v4, + DWORD_PTR v5, DWORD_PTR v6, DWORD_PTR v7, DWORD_PTR v8, + DWORD_PTR v9, DWORD_PTR v10, DWORD_PTR v11, DWORD_PTR v12, + DWORD_PTR v13, DWORD_PTR v14, DWORD_PTR v15) +{ + printf(" Target15(%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld)\n", + (DWORD)v1, (DWORD)v2, (DWORD)v3, (DWORD)v4, + (DWORD)v5, (DWORD)v6, (DWORD)v7, (DWORD)v8, + (DWORD)v9, (DWORD)v10, (DWORD)v11, (DWORD)v12, + (DWORD)v13, (DWORD)v14, (DWORD)v15); + return 1015; +} + +DWORD_PTR WINAPI Target16(DWORD_PTR v1, DWORD_PTR v2, DWORD_PTR v3, DWORD_PTR v4, + DWORD_PTR v5, DWORD_PTR v6, DWORD_PTR v7, DWORD_PTR v8, + DWORD_PTR v9, DWORD_PTR v10, DWORD_PTR v11, DWORD_PTR v12, + DWORD_PTR v13, DWORD_PTR v14, DWORD_PTR v15, DWORD_PTR v16) +{ + printf(" Target16(%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld)\n", + (DWORD)v1, (DWORD)v2, (DWORD)v3, (DWORD)v4, + (DWORD)v5, (DWORD)v6, (DWORD)v7, (DWORD)v8, + (DWORD)v9, (DWORD)v10, (DWORD)v11, (DWORD)v12, + (DWORD)v13, (DWORD)v14, (DWORD)v15, (DWORD)v16); + return 1016; +} + +DWORD_PTR WINAPI TargetV(DWORD_PTR v1, ...) +{ + DWORD_PTR args[32]; + + va_list va; + va_start(va, v1); + + int argc = 0; + for (args[argc++] = v1; args[argc-1] != 0;) { + args[argc++] = va_arg(va, DWORD_PTR); + } + va_end(va); + + printf(" TargetV ("); + int i = argc - 1; + for (; i > 0; i--) { + printf("%ld,", (DWORD)args[i]); + } + printf("%ld)\n", (DWORD)args[0]); + + return 1000 + argc; +} + +DWORD_PTR WINAPI TargetR(DWORD_PTR v1, ...) +{ + DWORD_PTR args[32]; + + va_list va; + va_start(va, v1); + + int argc = 0; + for (args[argc++] = v1; args[argc-1] != 0;) { + args[argc++] = va_arg(va, DWORD_PTR); + } + va_end(va); + + if (v1 > 1) { + printf(":"); + switch (argc) { + default: + return TargetR(0) + 1; + case 1: + return TargetR(args[0] - 1) + 1; + case 2: + return TargetR(args[0] - 1, args[1]) + 1; + case 3: + return TargetR(args[0] - 1, args[1], args[2]) + 1; + case 4: + return TargetR(args[0] - 1, args[1], args[2], args[3]) + 1; + case 5: + return TargetR(args[0] - 1, args[1], args[2], args[3], + args[4]) + 1; + case 6: + return TargetR(args[0] - 1, args[1], args[2], args[3], + args[4], args[5]) + 1; + case 7: + return TargetR(args[0] - 1, args[1], args[2], args[3], + args[4], args[5], args[6]) + 1; + case 8: + return TargetR(args[0] - 1, args[1], args[2], args[3], + args[4], args[5], args[6], args[7]) + 1; + case 9: + return TargetR(args[0] - 1, args[1], args[2], args[3], + args[4], args[5], args[6], args[7], + args[8]) + 1; + case 10: + return TargetR(args[0] - 1, args[1], args[2], args[3], + args[4], args[5], args[6], args[7], + args[8], args[9]) + 1; + case 11: + return TargetR(args[0] - 1, args[1], args[2], args[3], + args[4], args[5], args[6], args[7], + args[8], args[9], args[10]) + 1; + case 12: + return TargetR(args[0] - 1, args[1], args[2], args[3], + args[4], args[5], args[6], args[7], + args[8], args[9], args[10], args[11]) + 1; + case 13: + return TargetR(args[0] - 1, args[1], args[2], args[3], + args[4], args[5], args[6], args[7], + args[8], args[9], args[10], args[11], + args[12]) + 1; + case 14: + return TargetR(args[0] - 1, args[1], args[2], args[3], + args[4], args[5], args[6], args[7], + args[8], args[9], args[10], args[11], + args[12], args[13]) + 1; + case 15: + return TargetR(args[0] - 1, args[1], args[2], args[3], + args[4], args[5], args[6], args[7], + args[8], args[9], args[10], args[11], + args[12], args[13], args[14]) + 1; + case 16: + return TargetR(args[0] - 1, args[1], args[2], args[3], + args[4], args[5], args[6], args[7], + args[8], args[9], args[10], args[11], + args[12], args[13], args[14], args[15]) + 1; + case 17: + return TargetR(args[0] - 1, args[1], args[2], args[3], + args[4], args[5], args[6], args[7], + args[8], args[9], args[10], args[11], + args[12], args[13], args[14], args[15], + args[16]) + 1; + } + } + + printf(" TargetR ("); + int i = argc - 1; + for (; i > 0; i--) { + printf("%ld,", (DWORD)args[i]); + } + printf("%ld)\n", (DWORD)args[0]); + + return 2000 + argc; +} + + +BOOL WINAPI DllMain(HINSTANCE hinst, DWORD dwReason, LPVOID reserved) +{ + (void)hinst; + (void)dwReason; + (void)reserved; + + return TRUE; +} + +// +///////////////////////////////////////////////////////////////// End of File. |