home *** CD-ROM | disk | FTP | other *** search
- /*++
-
- Copyright (c) 1990 Microsoft Corporation
-
- Module Name:
-
- dbmon.c
-
- Abstract:
-
- A simple program to print strings passed to OutputDebugString when
- the app printing the strings is not being debugged.
-
- Author:
-
- Kent Forschmiedt (kentf) 30-Sep-1994
-
- Revision History:
-
- --*/
-
- #include <windows.h>
- #include <stdio.h>
- #include <stdlib.h>
-
- int _cdecl
- main(
- int argc,
- char ** argv
- )
- /*++
-
- Routine Description:
-
-
- Arguments:
-
-
- Return Value:
-
-
- --*/
- {
- HANDLE AckEvent;
- HANDLE ReadyEvent;
- HANDLE SharedFile;
- LPVOID SharedMem;
- LPSTR String;
- DWORD ret;
- DWORD LastPid;
- LPDWORD pThisPid;
- BOOL DidCR;
-
- SECURITY_ATTRIBUTES sa;
- SECURITY_DESCRIPTOR sd;
-
- sa.nLength = sizeof(SECURITY_ATTRIBUTES);
- sa.bInheritHandle = TRUE;
- sa.lpSecurityDescriptor = &sd;
-
- if(!InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION)) {
- fprintf(stderr,"unable to InitializeSecurityDescriptor, err == %d\n",
- GetLastError());
- exit(1);
- }
-
- if(!SetSecurityDescriptorDacl(&sd, TRUE, (PACL)NULL, FALSE)) {
- fprintf(stderr,"unable to SetSecurityDescriptorDacl, err == %d\n",
- GetLastError());
- exit(1);
- }
-
- AckEvent = CreateEvent(&sa, FALSE, FALSE, "DBWIN_BUFFER_READY");
-
- if (!AckEvent) {
- fprintf(stderr,
- "dbmon: Unable to create synchronization object, err == %d\n",
- GetLastError());
- exit(1);
- }
-
- if (GetLastError() == ERROR_ALREADY_EXISTS) {
- fprintf(stderr, "dbmon: already running\n");
- exit(1);
- }
-
- ReadyEvent = CreateEvent(&sa, FALSE, FALSE, "DBWIN_DATA_READY");
-
- if (!ReadyEvent) {
- fprintf(stderr,
- "dbmon: Unable to create synchronization object, err == %d\n",
- GetLastError());
- exit(1);
- }
-
- SharedFile = CreateFileMapping(
- (HANDLE)-1,
- &sa,
- PAGE_READWRITE,
- 0,
- 4096,
- "DBWIN_BUFFER");
-
- if (!SharedFile) {
- fprintf(stderr,
- "dbmon: Unable to create file mapping object, err == %d\n",
- GetLastError());
- exit(1);
- }
-
- SharedMem = MapViewOfFile(
- SharedFile,
- FILE_MAP_READ,
- 0,
- 0,
- 512);
-
- if (!SharedMem) {
- fprintf(stderr,
- "dbmon: Unable to map shared memory, err == %d\n",
- GetLastError());
- exit(1);
- }
-
- String = (LPSTR)SharedMem + sizeof(DWORD);
- pThisPid = SharedMem;
-
- LastPid = 0xffffffff;
- DidCR = TRUE;
-
- SetEvent(AckEvent);
-
- for (;;) {
-
- ret = WaitForSingleObject(ReadyEvent, INFINITE);
-
- if (ret != WAIT_OBJECT_0) {
-
- fprintf(stderr, "dbmon: wait failed; err == %d\n", GetLastError());
- exit(1);
-
- } else {
-
- if (LastPid != *pThisPid) {
- LastPid = *pThisPid;
- if (!DidCR) {
- putchar('\n');
- DidCR = TRUE;
- }
- }
-
- if (DidCR) {
- printf("%3u: ", LastPid);
- }
-
- printf("%s", String);
- DidCR = (*String && (String[strlen(String) - 1] == '\n'));
- SetEvent(AckEvent);
-
- }
-
- }
-
- return 0;
- }
-