|
|
/******************************************************************************
* * Copyright (c) 2000 Microsoft Corporation * * Module Name: * chglog.cpp * * Abstract: * Tool for enumerating the change log - forward/reverse * * Revision History: * Brijesh Krishnaswami (brijeshk) 04/09/2000 * created * *****************************************************************************/
#include <nt.h>
#include <ntrtl.h>
#include <nturtl.h>
#include <windows.h>
#include <stdio.h>
#include "srapi.h"
#include <shellapi.h>
#include "enumlogs.h"
#include "srrpcapi.h"
#include <dbgtrace.h>
struct _EVENT_STR_MAP { DWORD EventId; LPWSTR pEventStr; } EventMap[ 13 ] = { {SrEventInvalid , L"INVALID " }, {SrEventStreamChange, L"FILE-MODIFY" }, {SrEventAclChange, L"ACL-CHANGE " }, {SrEventAttribChange, L"ATTR-CHANGE" }, {SrEventStreamOverwrite,L"FILE-MODIFY" }, {SrEventFileDelete, L"FILE-DELETE" }, {SrEventFileCreate, L"FILE-CREATE" }, {SrEventFileRename, L"FILE-RENAME" }, {SrEventDirectoryCreate,L"DIR-CREATE " }, {SrEventDirectoryRename,L"DIR-RENAME " }, {SrEventDirectoryDelete,L"DIR-DELETE " }, {SrEventMountCreate, L"MNT-CREATE " }, {SrEventMountDelete, L"MNT-DELETE " } };
LPWSTR GetEventString( DWORD EventId ) { LPWSTR pStr = NULL; static WCHAR EventStringBuffer[8];
for( int i=0; i<sizeof(EventMap)/sizeof(_EVENT_STR_MAP);i++) { if ( EventMap[i].EventId == EventId ) { pStr = EventMap[i].pEventStr; } }
if (pStr == NULL) { pStr = &EventStringBuffer[0]; wsprintf(pStr, L"0x%X", EventId); }
return pStr; }
void __cdecl main() { DWORD dwTargetRPNum = 0; LPWSTR * argv = NULL; int argc; HGLOBAL hMem = NULL; BOOL fSwitch = TRUE; BOOL fForward = TRUE; BOOL fExtended = FALSE; DWORD dwRc;
InitAsyncTrace();
argv = CommandLineToArgvW(GetCommandLine(), &argc);
if (! argv) { printf("Error parsing arguments"); goto done; } if (argc < 2) { printf("Usage: chglog <drive> <extended=0> <forward=1/0> <RPNum> <Switch=1/0>"); goto done; } if (argc >= 3) { fExtended = _wtoi(argv[2]); } if (argc >= 4) { fForward = _wtoi(argv[3]); }
if (argc >= 5) { dwTargetRPNum = (DWORD) _wtol(argv[4]); }
if (argc >= 6) { fSwitch = _wtoi(argv[5]); }
{ if (fSwitch) { dwRc = SRSwitchLog(); if (ERROR_SUCCESS != dwRc) { printf("! SRSwitchLog : %ld", dwRc); goto done; } }
CChangeLogEntryEnum ChangeLog(argv[1], fForward, dwTargetRPNum, fSwitch); CChangeLogEntry cle; if (ERROR_SUCCESS != ChangeLog.FindFirstChangeLogEntry(cle)) { printf("No change log entries"); goto done; }
do { if (fExtended) { printf( "%08I64ld\t%S\tFlags=%08d\tAttr=%08d\tAcl=%S\tProcess=%S\tPath1=%S\tPath2=%S\tTemp=%S\tShortName=%S\n", cle.GetSequenceNum(), GetEventString(cle.GetType()), cle.GetFlags(), cle.GetAttributes(), cle.GetAcl() ? L"Yes" : L"No", cle.GetProcess() ? cle.GetProcess() : L"null", cle.GetPath1() ? cle.GetPath1() : L"null", cle.GetPath2() ? cle.GetPath2() : L"null", cle.GetTemp() ? cle.GetTemp() : L"null", cle.GetShortName() ? cle.GetShortName() : L"null"); } else { printf( "%08I64d\t%S\t%S\t%S\t%S\t%S\n", cle.GetSequenceNum(), GetEventString(cle.GetType()), cle.GetProcess() ? cle.GetProcess() : L"null", cle.GetPath1() ? cle.GetPath1() : L"null", cle.GetPath2() ? cle.GetPath2() : L"null", cle.GetTemp() ? cle.GetTemp() : L"null"); } dwRc = ChangeLog.FindNextChangeLogEntry(cle); } while (dwRc == ERROR_SUCCESS);
if (argc == 7 && 0 == lstrcmpi(argv[6], L"lock")) getchar(); ChangeLog.FindClose(); }
done: if (argv) hMem = GlobalHandle(argv); if (hMem) GlobalFree(hMem);
TermAsyncTrace(); return; }
|