/*++ Copyright (c) 1997-1999 Microsoft Corporation Revision History: --*/ #include "stdafx.h" #include "wmihlp.h" void PrintHeader(WNODE_HEADER Header, CString & output) { SYSTEMTIME sysTime; FILETIME fileTime; FILETIME localFileTime; CString tmp; // Convert the file time // fileTime.dwLowDateTime = Header.TimeStamp.LowPart; fileTime.dwHighDateTime = Header.TimeStamp.HighPart; FileTimeToLocalFileTime(&fileTime, &localFileTime ); FileTimeToSystemTime(&localFileTime, &sysTime); // Print the info // tmp.Format(_T("Buffer Size: 0x%x\r\n") _T("Provider Id: 0x%x\r\n") _T("Version : %u\r\n") _T("Linkage : 0x%x\r\n") _T("Time Stamp : %u:%02u %u\\%u\\%u\r\n") _T("Guid : 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\r\n") _T("Flags : 0x%02x\r\n"), Header.BufferSize, Header.ProviderId, Header.Version, Header.Linkage, sysTime.wHour, sysTime.wMinute, sysTime.wMonth, sysTime.wDay, sysTime.wYear, Header.Guid.Data1, Header.Guid.Data2, Header.Guid.Data3, Header.Guid.Data4[0], Header.Guid.Data4[1], Header.Guid.Data4[2], Header.Guid.Data4[3], Header.Guid.Data4[4], Header.Guid.Data4[5], Header.Guid.Data4[6], Header.Guid.Data4[7], Header.Flags ); // Print readable flags // if (Header.Flags & WNODE_FLAG_ALL_DATA) { output += _T("WNODE_FLAG_ALL_DATA\r\n"); } if (Header.Flags & WNODE_FLAG_SINGLE_INSTANCE) { output += _T("WNODE_FLAG_SINGLE_INSTANCE\r\n"); } if (Header.Flags & WNODE_FLAG_SINGLE_ITEM) { output += _T("WNODE_FLAG_SINGLE_ITEM\r\n"); } if (Header.Flags & WNODE_FLAG_EVENT_ITEM) { output += _T("WNODE_FLAG_EVENT_ITEM\r\n"); } if (Header.Flags & WNODE_FLAG_FIXED_INSTANCE_SIZE) { output += _T("WNODE_FLAG_FIXED_INSTANCE_SIZE\r\n"); } if (Header.Flags & WNODE_FLAG_TOO_SMALL) { output += _T("WNODE_FLAG_TOO_SMALL\r\n"); } if (Header.Flags & WNODE_FLAG_INSTANCES_SAME) { output += _T("WNODE_FLAG_INSTANCES_SAME\r\n"); } if (Header.Flags & WNODE_FLAG_INTERNAL) { output += _T("WNODE_FLAG_INTERNAL\r\n"); } if (Header.Flags & WNODE_FLAG_USE_TIMESTAMP) { output += _T("WNODE_FLAG_USE_TIMESTAMP\r\n"); } if (Header.Flags & WNODE_FLAG_TRACED_GUID) { output += _T("WNODE_FLAG_TRACED_GUID\r\n"); } if (Header.Flags & WNODE_FLAG_EVENT_REFERENCE) { output += _T("WNODE_FLAG_EVENT_REFERENCE\r\n"); } if (Header.Flags & WNODE_FLAG_ANSI_INSTANCENAMES) { output += _T("WNODE_FLAG_ANSI_INSTANCENAMES\r\n"); } if (Header.Flags & WNODE_FLAG_METHOD_ITEM) { output += _T("WNODE_FLAG_METHOD_ITEM\r\n"); } if (Header.Flags & WNODE_FLAG_PDO_INSTANCE_NAMES) { output += _T("WNODE_FLAG_PDO_INSTANCE_NAMES\r\n"); } output += _T("\r\n"); } VOID PrintCountedString( LPTSTR lpString, CString & output ) { SHORT usNameLength; LPTSTR lpStringPlusNull; usNameLength = * (USHORT *) lpString; lpStringPlusNull = (LPTSTR) new TCHAR[usNameLength + sizeof(TCHAR)]; if (lpStringPlusNull != NULL) { lpString = (LPTSTR) ((PBYTE)lpString + sizeof(USHORT)); if (MyIsTextUnicode(lpString)) { usNameLength /= 2; } _tcsncpy( lpStringPlusNull, lpString, usNameLength ); _tcscpy( lpStringPlusNull + usNameLength, __T("") ); output += lpStringPlusNull; // _tprintf(__T("%s\n"), lpStringPlusNull); delete[] lpStringPlusNull; } } BOOL MyIsTextUnicode(PVOID string) { if (*((USHORT*)string) <= 0xff) { return TRUE; } else { return FALSE; } } BOOL ValidHexText(CWnd *parent, const CString &txt, LPDWORD lpData, UINT line) { int i, len; TCHAR *stop; CString msg; if ((len = txt.GetLength()) > 8) { parent->MessageBox(_T("Must enter a value of 8 or less characters!")); return FALSE; } for (i = 0; i < len; i++) { if (!_istxdigit(txt[i])) { if (line == -1) msg.Format(_T("All digits must be hex! (digit #%d isn't)"), i+1); else msg.Format(_T("All digits must be hex!\n(digit #%d on line #%d isn't)"), i+1, line); parent->MessageBox(msg); return FALSE; } } *lpData = (DWORD) _tcstol(txt, &stop, 16); return TRUE; }