aboutsummaryrefslogtreecommitdiffhomepage
path: root/samples/syelog/sltest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'samples/syelog/sltest.cpp')
-rw-r--r--samples/syelog/sltest.cpp145
1 files changed, 145 insertions, 0 deletions
diff --git a/samples/syelog/sltest.cpp b/samples/syelog/sltest.cpp
new file mode 100644
index 0000000..8377872
--- /dev/null
+++ b/samples/syelog/sltest.cpp
@@ -0,0 +1,145 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// Detours Test Program (sltest.cpp of sltest.exe)
+//
+// Microsoft Research Detours Package
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//
+// Test the named-pipe-based connection with syelog.lib to the syelog
+// system-event logger.
+//
+#include <windows.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <stddef.h>
+#pragma warning(push)
+#if _MSC_VER > 1400
+#pragma warning(disable:6102 6103) // /analyze warnings
+#endif
+#include <strsafe.h>
+#pragma warning(pop)
+#include "syelog.h"
+#include "detours.h"
+
+extern "C" {
+
+ HANDLE ( WINAPI *
+ Real_CreateFileW)(LPCWSTR a0,
+ DWORD a1,
+ DWORD a2,
+ LPSECURITY_ATTRIBUTES a3,
+ DWORD a4,
+ DWORD a5,
+ HANDLE a6)
+ = CreateFileW;
+
+ BOOL ( WINAPI *
+ Real_WriteFile)(HANDLE hFile,
+ LPCVOID lpBuffer,
+ DWORD nNumberOfBytesToWrite,
+ LPDWORD lpNumberOfBytesWritten,
+ LPOVERLAPPED lpOverlapped)
+ = WriteFile;
+ BOOL ( WINAPI *
+ Real_FlushFileBuffers)(HANDLE hFile)
+ = FlushFileBuffers;
+ BOOL ( WINAPI *
+ Real_CloseHandle)(HANDLE hObject)
+ = CloseHandle;
+
+ BOOL ( WINAPI *
+ Real_WaitNamedPipeW)(LPCWSTR lpNamedPipeName, DWORD nTimeOut)
+ = WaitNamedPipeW;
+ BOOL ( WINAPI *
+ Real_SetNamedPipeHandleState)(HANDLE hNamedPipe,
+ LPDWORD lpMode,
+ LPDWORD lpMaxCollectionCount,
+ LPDWORD lpCollectDataTimeout)
+ = SetNamedPipeHandleState;
+
+ DWORD ( WINAPI *
+ Real_GetCurrentProcessId)(VOID)
+ = GetCurrentProcessId;
+ VOID ( WINAPI *
+ Real_GetSystemTimeAsFileTime)(LPFILETIME lpSystemTimeAsFileTime)
+ = GetSystemTimeAsFileTime;
+
+ VOID ( WINAPI *
+ Real_InitializeCriticalSection)(LPCRITICAL_SECTION lpSection)
+ = InitializeCriticalSection;
+ VOID ( WINAPI *
+ Real_EnterCriticalSection)(LPCRITICAL_SECTION lpSection)
+ = EnterCriticalSection;
+ VOID ( WINAPI *
+ Real_LeaveCriticalSection)(LPCRITICAL_SECTION lpSection)
+ = LeaveCriticalSection;
+}
+
+int main(int argc, char **argv)
+{
+ BOOL fNeedHelp = FALSE;
+ BOOL fRequestExitOnClose = FALSE;
+
+ int arg = 1;
+ for (; arg < argc && (argv[arg][0] == '-' || argv[arg][0] == '/'); arg++) {
+ CHAR *argn = argv[arg] + 1;
+ CHAR *argp = argn;
+ while (*argp && *argp != ':') {
+ argp++;
+ }
+ if (*argp == ':') {
+ *argp++ = '\0';
+ }
+
+ switch (argn[0]) {
+
+ case 'x': // Request exit on close.
+ case 'X':
+ fRequestExitOnClose = TRUE;
+ break;
+
+ case '?': // Help.
+ fNeedHelp = TRUE;
+ break;
+
+ default:
+ fNeedHelp = TRUE;
+ printf("SLTEST: Bad argument: %s:%s\n", argn, argp);
+ break;
+ }
+ }
+
+ if (fNeedHelp) {
+ printf("Usage:\n"
+ " sltest.exe [options] message\n"
+ "Options:\n"
+ " /x Ask syelogd.exe to terminate when this connect closes.\n"
+ " /? Display this help message.\n"
+ "\n");
+ exit(1);
+ }
+
+ SyelogOpen("sltest", SYELOG_FACILITY_APPLICATION);
+ if (arg >= argc) {
+ Syelog(SYELOG_SEVERITY_INFORMATION, "Hello World! [1 of 4]");
+ Syelog(SYELOG_SEVERITY_INFORMATION, "Hello World! [2 of 4]");
+ Syelog(SYELOG_SEVERITY_INFORMATION, "Hello World! [3 of 4]");
+ Syelog(SYELOG_SEVERITY_INFORMATION, "Hello World! [4 of 4]");
+ }
+ else {
+ CHAR Buffer[1024] = "";
+
+ for (; arg < argc; arg++) {
+ StringCchCatA(Buffer, ARRAYSIZE(Buffer), argv[arg]);
+ if (arg + 1 < argc) {
+ StringCchCatA(Buffer, ARRAYSIZE(Buffer), " ");
+ }
+ }
+ Syelog(SYELOG_SEVERITY_INFORMATION, Buffer);
+ }
+
+ SyelogClose(fRequestExitOnClose);
+
+ return 0;
+}