21#define LVM_PROGRESS (WM_APP + 1)
36#define EVENT_MESSAGE_EVENTTEXT_BUFFER (1024*10)
37#define EVENT_MESSAGE_FILE_BUFFER (1024*10)
38#define EVENT_DLL_SEPARATOR L";"
39#define EVENT_CATEGORY_MESSAGE_FILE L"CategoryMessageFile"
40#define EVENT_MESSAGE_FILE L"EventMessageFile"
41#define EVENT_PARAMETER_MESSAGE_FILE L"ParameterMessageFile"
43#define MAX_LOADSTRING 255
198 if (!lpCmdLine || !*lpCmdLine)
235 if (cbFileName > 0 &&
lpFileName[cbFileName - 1] ==
L'\"')
302 while (*lpTemp ==
L'\\')
351 DWORD dwType, cbData;
365 Settings.wpPos.showCmd = nDefCmdShow;
481 &
Settings.wpPos.rcNormalPosition.left,
482 &
Settings.wpPos.rcNormalPosition.top,
483 &
Settings.wpPos.rcNormalPosition.right,
484 &
Settings.wpPos.rcNormalPosition.bottom,
490 Settings.wpPos.showCmd = nDefCmdShow;
544 Settings.wpPos.rcNormalPosition.left,
545 Settings.wpPos.rcNormalPosition.top,
546 Settings.wpPos.rcNormalPosition.right,
547 Settings.wpPos.rcNormalPosition.bottom,
576 iccx.
dwSize =
sizeof(iccx);
706 return (
int)
msg.wParam;
716 SYSTEMTIME st1970 = { 1970, 1, 0, 1, 0, 0, 0, 0 };
724 uUCT.ft.dwHighDateTime = 0;
725 uUCT.ft.dwLowDateTime = EventTime;
727 uUCT.ll = uUCT.ll * 10000000 + u1970.ll;
755 dwFlags &= ~FORMAT_MESSAGE_FROM_STRING;
795 dwFlags &= ~FORMAT_MESSAGE_ARGUMENT_ARRAY;
858 cbLength = (
wcslen(lpMessageDllList) + 1) *
sizeof(
WCHAR);
860 if (!szMessageDllList)
862 CopyMemory(szMessageDllList, lpMessageDllList, cbLength);
905 IN BOOL bMessagePreFormatted,
916 DWORD dwParamCount = 0;
918 size_t cchParams = 0;
925 *pFinalMessage =
NULL;
928 if (bMessagePreFormatted)
930 while ((pTempMessage =
wcschr(pTempMessage,
L'%')))
942 while ((pTempMessage =
wcsstr(pTempMessage,
L"%%")))
954 if (dwParamCount == 0)
972 pTempMessage = (
LPWSTR)pMessage;
973 if (bMessagePreFormatted)
975 while ((pTempMessage =
wcschr(pTempMessage,
L'%')) && (
i < dwParamCount))
992 while ((pTempMessage =
wcsstr(pTempMessage,
L"%%")) && (
i < dwParamCount))
1000 while (
iswdigit(*++pTempMessage)) ;
1009 for (
i = 0;
i < dwParamCount;
i++)
1016 pParamData[
i].pParameterID,
1018 if (!pParamData[
i].pParameter)
1024 cchParams +=
wcslen(pParamData[
i].pParameter);
1033 if (!*pFinalMessage)
1039 pTempFinalMessage = *pFinalMessage;
1042 pTempMessage = (
LPWSTR)pMessage;
1043 for (
i = 0;
i < dwParamCount;
i++)
1050 pTempFinalMessage +=
cch;
1053 if (pParamData[
i].pParameter)
1069 pTempFinalMessage +=
cch;
1082 for (
i = 0;
i < dwParamCount;
i++)
1084 if (pParamData[
i].pParameter)
1103 WCHAR wszNumber[24];
1104 WCHAR wszDecimalSep[8], wszThousandSep[8];
1106 WCHAR wszGrouping[12];
1130 for (
i = 0;
i < cchGrouping;
i++)
1132 WCHAR wch = wszGrouping[
i];
1134 if (wch >=
L'0' && wch <=
L'9')
1136 else if (wch !=
L';')
1157 return cchResult - 1;
1163 UINT cchWritten, cchRemaining;
1165 size_t cchStringRemaining;
1168 cchWritten =
FormatInteger(cbSize, pwszResult, cchResultMax);
1173 pwszEnd = pwszResult + cchWritten;
1174 cchRemaining = cchResultMax - cchWritten;
1175 StringCchCopyExW(pwszEnd, cchRemaining,
L" ", &pwszEnd, &cchStringRemaining, 0);
1176 cchRemaining = (
UINT)cchStringRemaining;
1178 cchRemaining -= cchWritten;
1180 return cchResultMax - cchRemaining;
1186 UINT cchWritten, cchRemaining;
1188 size_t cchCopyRemaining;
1200 pwszEnd = pwszResult + cchWritten;
1201 cchRemaining = cchResultMax - cchWritten;
1203 cchRemaining = (
UINT)cchCopyRemaining;
1207 pwszEnd += cchWritten;
1208 cchRemaining -= cchWritten;
1223 UINT cchRemaining = cchResult;
1224 size_t cchCopyRemaining;
1225 LPWSTR pwszEnd = pwszResult;
1236 cchRemaining -= cchWritten;
1237 pwszEnd += cchWritten;
1240 cchRemaining = (
UINT)cchCopyRemaining;
1257 IN INT SelectedImage,
1266 Insert.hParent = hParent;
1267 Insert.item.pszText = lpText;
1268 Insert.item.iImage =
Image;
1269 Insert.item.iSelectedImage = SelectedImage;
1270 Insert.item.lParam =
lParam;
1324 if (EventLog->LogName)
1327 if (EventLog->ComputerName)
1330 if (EventLog->FileName)
1346 pStr = (
PWSTR)MultiStr;
1347 while (*pStr) pStr += (
wcslen(pStr) + 1);
1348 Length = MultiStr - pStr + 2;
1377 if (!EventLogFilter)
1381 EventLogFilter->
Warning = Warning;
1398 return EventLogFilter;
1404 if (EventLogFilter->Sources)
1407 if (EventLogFilter->Users)
1410 if (EventLogFilter->ComputerNames)
1476 if (ComputerName && *ComputerName)
1479 while (*ComputerName ==
L'\\')
1508 if (ComputerName && *ComputerName)
1513 if (*pFullFileName && pFullFileName[1] ==
L':')
1514 pFullFileName[1] =
L'$';
1519 pFullFileName[0] =
L'\\';
1520 pFullFileName[1] =
L'\\';
1521 wcsncpy(pFullFileName + 2, ComputerName,
wcslen(ComputerName));
1522 pFullFileName[2 +
wcslen(ComputerName)] =
L'\\';
1591 pModuleName,
cchName) != 0 && *pModuleName);
1615 szMessageDLL,
_countof(szMessageDLL)))
1625 pevlr->EventCategory,
1646 if (pevlr->EventCategory != 0)
1668 WCHAR SourceModuleName[1024];
1669 WCHAR ParameterModuleName[1024];
1672 LPWSTR szStringArray, szMessage;
1679 szStringArray = (
LPWSTR)((
LPBYTE)pevlr + pevlr->StringOffset);
1683 SourceModuleName,
_countof(SourceModuleName)))
1696 if (!IsParamModNameCached)
1700 ParameterModuleName,
_countof(ParameterModuleName));
1704 if (IsParamModNameCached)
1709 szMessage = szStringArray;
1722 for (
i = 0;
i < pevlr->NumStrings;
i++)
1724 szMessage +=
wcslen(szMessage) + 1;
1726 cch = szMessage - szStringArray;
1729 szMessage = szStringArray;
1730 for (
i = 0;
i < pevlr->NumStrings;
i++)
1732 lpMsgBuf = szMessage;
1733 while ((lpMsgBuf =
wcsstr(lpMsgBuf,
L"%%")))
1737 MoveMemory(lpMsgBuf, lpMsgBuf+1, ((szStringArray +
cch) - lpMsgBuf - 1) *
sizeof(
WCHAR));
1741 szArguments[
i] = szMessage;
1742 szMessage +=
wcslen(szMessage) + 1;
1767 lpMsgBuf = szMessage;
1790 szMessage = lpMsgBuf;
1795 szMessage =
L"Event ID ( %lu ), Source ( %s )\n\n";
1802 szMessage = szStringArray;
1803 for (
i = 0;
i < pevlr->NumStrings;
i++)
1807 szMessage +=
wcslen(szMessage) + 1;
1820 switch (dwEventType)
1856 WCHAR szDomain[1024];
1866 pCurrentSid = (
PSID)((
LPBYTE)pelr + pelr->UserSidOffset);
1873 else if (*pLastSid &&
EqualSid(*pLastSid, pCurrentSid))
1879 if (pelr->UserSidLength > 0)
1901 if (
wcslen(StringSid) + 1 <= cchUser)
1944 if ((pevlr->EventType ==
EVENTLOG_SUCCESS && !EventLogFilter->Information ) ||
1970 if (!*FilterString && !*
String)
1979 if ( (!*FilterString && *
String) || (*FilterString && !*
String) )
1988 pStr = FilterString;
1997 pStr += (
wcslen(pStr) + 1);
2025 DWORD dwTotalRecords = 0, dwCurrentRecord = 0;
2027 size_t cchRemaining;
2034 UINT uStep = 0, uStepAt = 0, uPos = 0;
2047 PWCHAR lpTitleTemplateEnd;
2060 EventLog = EventLogFilter->
EventLogs[0];
2072 &lpTitleTemplateEnd,
2076 dwMaxLength = (
DWORD)cchRemaining;
2083 sizeof(szStatusText),
2094 L"Many-logs filtering is not implemented yet!!",
2124 EventLog = EventLogFilter->
EventLogs[LogIndex];
2132 if (hEventLog ==
NULL)
2143 if (dwTotalRecords > 0)
2170 uStepAt = (dwTotalRecords / 100) + 1;
2189 dwWanted = dwNeeded;
2205 pEvlrBuffer = (
LPBYTE)pEvlr;
2206 pEvlrEnd = pEvlrBuffer + dwRead;
2208 while (pEvlrBuffer < pEvlrEnd)
2211 PWSTR lpszUsername, lpszCategoryName;
2216 if (uStep % uStepAt == 0)
2247 ? szUsername : szNoUsername;
2257 ? szCategory : szNoCategory;
2266 lviEventItem.
iItem = 0;
2269 lviEventItem.
pszText = szEventTypeText;
2306 pEvlrBuffer += pEvlrTmp->
Length;
2336 sizeof(szStatusText),
2446 if (!EventLogFilter)
2508 tvItemEx.
hItem = hti;
2513 *phti = tvItemEx.
hItem;
2540 if (EventLog ==
NULL)
2551 if (EventLogFilter ==
NULL)
2563 cchFileName =
wcslen(lpszFileName) + 1;
2570 2, 3, (
LPARAM)EventLogFilter);
2608 if (!EventLogFilter)
2621 EventLog = EventLogFilter->EventLogs[0];
2642 if (!EventLogFilter)
2683 if (!EventLogFilter)
2711 EventLog = EventLogFilter->EventLogs[0];
2735 if (!EventLogFilter)
2748 wcex.
cbSize =
sizeof(wcex);
2782 DWORD dwType, cbData;
2783 DWORD dwMessageID = 0;
2828 pModuleName,
cchName) != 0 && *pModuleName);
2837 cbData =
sizeof(dwMessageID);
2847 *pdwMessageID = dwMessageID;
2860 HKEY hEventLogKey, hLogKey;
2861 DWORD dwNumLogs = 0;
2862 DWORD dwIndex, dwMaxKeyLength;
2923 for (dwIndex = 0; dwIndex < dwNumLogs; dwIndex++)
2925 lpcName = dwMaxKeyLength;
2935 if (EventLog ==
NULL)
2943 if (EventLogFilter ==
NULL)
3035 2, 3, (
LPARAM)EventLogFilter);
3040 hItemDefault =
hItem;
3126 rs =
Settings.wpPos.rcNormalPosition;
3184 (rcClient.
bottom - rcClient.
top) - StatusHeight,
3240 : (rcClient.
bottom - rcClient.
top) - StatusHeight,
3268 for (iColumn = 0; iColumn <
ARRAYSIZE(columnItems); ++iColumn)
3270 lvc.
cx = columnItems[iColumn].width;
3346 :
cy - StatusHeight,
3401 if (pnmv->
iItem == -1)
3404 L"No selected items!",
3414#ifdef LVN_ITEMACTIVATE
3469 while (*pszText &&
iswspace(*pszText))
3557 if (EventLogFilter &&
ClearEvents(EventLogFilter))
3582 if (bNewest !=
Settings.bNewestEventsFirst)
3584 Settings.bNewestEventsFirst = bNewest;
3681 L"Help not implemented yet!",
3739 hInfo.
pt.
y = yPos - rc.
top;
3913 DWORD dwMaxSize = 0, dwRetention = 0;
3949 cbData =
sizeof(dwMaxSize);
3960 dwMaxSize = 16384 * 1024;
3965 cbData =
sizeof(dwRetention);
3979 dwRetention = (dwRetention + 24*3600 - 1) / (24*3600);
4071 if (dwRetention == 0)
4103 DWORD dwMaxSize = 0, dwRetention = 0;
4150 sizeof(dwRetention));
4201 if (EventLogFilter &&
ClearEvents(EventLogFilter))
4263 L"Help not implemented yet!",
4288 if (!EventLogFilter)
4300 psh.
dwSize =
sizeof(psh);
4312 psp[0].
dwSize =
sizeof(psp[0]);
4321 psp[1].
dwSize =
sizeof(psp[1]);
4372 rcWnd.
right - sbVXSize,
4453 L"Help not implemented yet!",
#define InterlockedIncrement
#define InterlockedDecrement
#define IDC_UPDOWN_EVENTS_AGE
#define IDS_NOT_AVAILABLE
#define IDM_EVENT_DETAILS_VIEW
#define IDD_LOGPROPERTIES_GENERAL
#define IDM_OPEN_EVENTLOG
#define IDC_OVERWRITE_AS_NEEDED
#define IDS_RESTOREDEFAULTS
#define IDI_CLOSED_CATEGORY
#define IDS_EVENTLOG_INFORMATION_TYPE
#define IDS_EVENTLOG_SUCCESS
#define IDI_OPENED_CATEGORY
#define IDS_COLUMNCOMPUTER
#define IDC_UPDOWN_MAXLOGSIZE
#define IDM_CLOSE_EVENTLOG
#define IDC_OVERWRITE_OLDER_THAN
#define IDS_EVENTSTRINGIDNOTFOUND
#define IDC_CREATED_LABEL
#define IDM_RENAME_EVENTLOG
#define IDM_EVENTLOG_SETTINGS
#define IDI_AUDITFAILUREICON
#define IDM_LIST_GRID_LINES
#define IDI_AUDITSUCCESSICON
#define IDM_EVENT_DETAILS
#define IDS_CLEAREVENTS_MSG
#define IDC_EDIT_MAXLOGSIZE
#define IDI_INFORMATIONICON
#define IDS_EVENTLOG_AUDIT_FAILURE
#define IDS_EVENTLOG_ERROR_TYPE
#define IDS_EVENTLOG_SYSTEM
#define IDM_SAVE_SETTINGS
#define IDM_SAVE_EVENTLOG
#define IDC_MODIFIED_LABEL
#define IDC_EDIT_EVENTS_AGE
#define IDD_EVENTDETAILS_DLG
#define IDC_RESTOREDEFAULTS
#define IDS_EVENTLOG_WARNING_TYPE
#define IDC_ACCESSED_LABEL
#define IDS_EVENTLOG_UNKNOWN_TYPE
#define IDS_EVENTLOG_AUDIT_SUCCESS
#define IDS_COLUMNCATEGORY
#define IDS_EVENTLOG_USER
#define RegCloseKey(hKey)
BOOL WINAPI InitCommonControlsEx(const INITCOMMONCONTROLSEX *lpInitCtrls)
BOOL WINAPI GetComputerNameW(LPWSTR lpBuffer, LPDWORD lpnSize)
static TAGREF LPCWSTR LPDWORD LPVOID lpBuffer
#define ERROR_NOT_ENOUGH_MEMORY
#define ERROR_INSUFFICIENT_BUFFER
LONG WINAPI RegCreateKeyExW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey, _In_ DWORD Reserved, _In_opt_ LPWSTR lpClass, _In_ DWORD dwOptions, _In_ REGSAM samDesired, _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes, _Out_ PHKEY phkResult, _Out_opt_ LPDWORD lpdwDisposition)
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
LONG WINAPI RegEnumKeyExW(_In_ HKEY hKey, _In_ DWORD dwIndex, _Out_ LPWSTR lpName, _Inout_ LPDWORD lpcbName, _Reserved_ LPDWORD lpReserved, _Out_opt_ LPWSTR lpClass, _Inout_opt_ LPDWORD lpcbClass, _Out_opt_ PFILETIME lpftLastWriteTime)
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
LONG WINAPI RegQueryInfoKeyW(HKEY hKey, LPWSTR lpClass, LPDWORD lpcClass, LPDWORD lpReserved, LPDWORD lpcSubKeys, LPDWORD lpcMaxSubKeyLen, LPDWORD lpcMaxClassLen, LPDWORD lpcValues, LPDWORD lpcMaxValueNameLen, LPDWORD lpcMaxValueLen, LPDWORD lpcbSecurityDescriptor, PFILETIME lpftLastWriteTime)
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
BOOL WINAPI LookupAccountSidW(LPCWSTR pSystemName, PSID pSid, LPWSTR pAccountName, LPDWORD pdwAccountName, LPWSTR pDomainName, LPDWORD pdwDomainName, PSID_NAME_USE peUse)
HANDLE WINAPI OpenEventLogW(IN LPCWSTR lpUNCServerName, IN LPCWSTR lpSourceName)
BOOL WINAPI ClearEventLogW(IN HANDLE hEventLog, IN LPCWSTR lpBackupFileName)
BOOL WINAPI CloseEventLog(IN HANDLE hEventLog)
BOOL WINAPI GetNumberOfEventLogRecords(IN HANDLE hEventLog, OUT PDWORD NumberOfRecords)
HANDLE WINAPI OpenBackupEventLogW(IN LPCWSTR lpUNCServerName, IN LPCWSTR lpFileName)
BOOL WINAPI BackupEventLogW(IN HANDLE hEventLog, IN LPCWSTR lpBackupFileName)
BOOL WINAPI ReadEventLogW(IN HANDLE hEventLog, IN DWORD dwReadFlags, IN DWORD dwRecordOffset, OUT LPVOID lpBuffer, IN DWORD nNumberOfBytesToRead, OUT DWORD *pnBytesRead, OUT DWORD *pnMinNumberOfBytesNeeded)
BOOL WINAPI ConvertSidToStringSidW(PSID Sid, LPWSTR *StringSid)
BOOL WINAPI IsValidSid(PSID pSid)
BOOL WINAPI EqualSid(PSID pSid1, PSID pSid2)
HIMAGELIST WINAPI ImageList_Create(INT cx, INT cy, UINT flags, INT cInitial, INT cGrow)
INT_PTR WINAPI PropertySheetW(LPCPROPSHEETHEADERW lppsh)
BOOL WINAPI GetOpenFileNameW(OPENFILENAMEW *ofn)
BOOL WINAPI GetSaveFileNameW(LPOPENFILENAMEW ofn)
#define INVALID_HANDLE_VALUE
#define HeapFree(x, y, z)
static DWORD DWORD * dwLength
DWORD WINAPI ExpandEnvironmentStringsW(IN LPCWSTR lpSrc, IN LPWSTR lpDst, IN DWORD nSize)
BOOL WINAPI GetFileAttributesExW(LPCWSTR lpFileName, GET_FILEEX_INFO_LEVELS fInfoLevelId, LPVOID lpFileInformation)
HANDLE WINAPI FindFirstFileW(IN LPCWSTR lpFileName, OUT LPWIN32_FIND_DATAW lpFindFileData)
BOOL WINAPI FindClose(HANDLE hFindFile)
HINSTANCE WINAPI DECLSPEC_HOTPATCH LoadLibraryExW(LPCWSTR lpLibFileName, HANDLE hFile, DWORD dwFlags)
DWORD WINAPI ResumeThread(IN HANDLE hThread)
HANDLE WINAPI DECLSPEC_HOTPATCH CreateThread(IN LPSECURITY_ATTRIBUTES lpThreadAttributes, IN DWORD dwStackSize, IN LPTHREAD_START_ROUTINE lpStartAddress, IN LPVOID lpParameter, IN DWORD dwCreationFlags, OUT LPDWORD lpThreadId)
BOOL WINAPI FileTimeToSystemTime(IN CONST FILETIME *lpFileTime, OUT LPSYSTEMTIME lpSystemTime)
BOOL WINAPI SystemTimeToFileTime(IN CONST SYSTEMTIME *lpSystemTime, OUT LPFILETIME lpFileTime)
BOOL WINAPI FileTimeToLocalFileTime(IN CONST FILETIME *lpFileTime, OUT LPFILETIME lpLocalFileTime)
INT WINAPI GetLocaleInfoW(LCID lcid, LCTYPE lctype, LPWSTR buffer, INT len)
LPWSTR WINAPI GetCommandLineW(void)
INT WINAPI DECLSPEC_HOTPATCH LoadStringW(HINSTANCE instance, UINT resource_id, LPWSTR buffer, INT buflen)
LPWSTR WINAPI StrFormatByteSizeW(LONGLONG llBytes, LPWSTR lpszDest, UINT cchMax)
static const WCHAR Cleanup[]
#define InterlockedExchangePointer(Target, Value)
#define RemoveEntryList(Entry)
#define InsertTailList(ListHead, Entry)
#define IsListEmpty(ListHead)
#define RemoveHeadList(ListHead)
#define InitializeListHead(ListHead)
WCHAR szEmptyList[MAX_LOADSTRING]
#define EVENT_DLL_SEPARATOR
DWORD ApplyParameterStringsToMessage(IN LPCWSTR lpMessageDllList, IN BOOL bMessagePreFormatted, IN CONST LPCWSTR pMessage, OUT LPWSTR *pFinalMessage)
static const LPCWSTR SystemLogs[]
VOID EventLogFilter_Free(IN PEVENTLOGFILTER EventLogFilter)
VOID ShowWin32Error(IN DWORD dwError)
static const LPCWSTR EVNTVWR_PARAM_KEY
VOID EventLog_Free(IN PEVENTLOG EventLog)
PEVENTLOGFILTER ActiveFilter
PEVENTLOGFILTER GetSelectedFilter(OUT HTREEITEM *phti OPTIONAL)
static DWORD WINAPI StartStopEnumEventsThread(IN LPVOID lpParameter)
LONG EventLogFilter_AddRef(IN PEVENTLOGFILTER EventLogFilter)
PEVENTLOG AllocEventLog(IN PCWSTR ComputerName OPTIONAL, IN PCWSTR LogName, IN BOOL Permanent)
VOID BuildLogListAndFilterList(IN LPCWSTR lpComputerName)
VOID ResizeWnd(INT cx, INT cy)
SIZE_T GetExpandedFilePathName(_In_opt_ PCWSTR ComputerName, _In_ PCWSTR FileName, _Out_writes_z_(nSize) PWSTR pFullFileName, _In_ SIZE_T nSize)
ATOM MyRegisterClass(HINSTANCE)
LONG EventLogFilter_Release(IN PEVENTLOGFILTER EventLogFilter)
VOID EventTimeToSystemTime(IN DWORD EventTime, OUT PSYSTEMTIME pSystemTime)
BOOL ProcessCmdLine(IN LPWSTR lpCmdLine)
VOID CloseUserEventLog(IN PEVENTLOGFILTER EventLogFilter, IN HTREEITEM hti)
BOOL FilterByString(IN PCWSTR FilterString, IN PWSTR String)
LPWSTR GetMessageStringFromDll(IN LPCWSTR lpMessageDll, IN DWORD dwFlags, IN DWORD dwMessageId, IN DWORD nSize, IN va_list *Arguments OPTIONAL)
#define EVENT_CATEGORY_MESSAGE_FILE
BOOL GetEventMessage(_In_ PCWSTR KeyName, _In_ PCWSTR SourceName, _In_ PEVENTLOGRECORD pevlr, _Out_writes_z_(cchText) PWSTR EventText, _In_ SIZE_T cchText)
BOOL GetEventCategory(_In_ PCWSTR KeyName, _In_ PCWSTR SourceName, _In_ PEVENTLOGRECORD pevlr, _Out_writes_z_(cchName) PWSTR CategoryName, _In_ SIZE_T cchName)
VOID OpenUserEventLogFile(IN LPCWSTR lpszFileName)
WCHAR szTitleTemplate[MAX_LOADSTRING]
WCHAR szStatusBarTemplate[MAX_LOADSTRING]
WCHAR szLoadingWait[MAX_LOADSTRING]
INT_PTR CALLBACK EventLogPropProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
BOOL FilterByType(IN PEVENTLOGFILTER EventLogFilter, IN PEVENTLOGRECORD pevlr)
static const LPCWSTR EVENTVWR_WNDCLASS
LIST_ENTRY EventLogFilterList
UINT FormatInteger(LONGLONG Num, LPWSTR pwszResult, UINT cchResultMax)
static const LPCWSTR EVENTLOG_BASE_KEY
struct _SETTINGS * PSETTINGS
BOOL GetFileTimeString(LPFILETIME lpFileTime, LPWSTR pwszResult, UINT cchResult)
LPWSTR lpszzUserLogsToLoad
PWSTR AllocAndCopyMultiStr(IN PCWSTR MultiStr OPTIONAL)
VOID GetEventType(_In_ WORD dwEventType, _Out_writes_z_(cchText) PWSTR pszEventType, _In_ SIZE_T cchText)
BOOL ClearEvents(IN PEVENTLOGFILTER EventLogFilter)
static VOID FreeRecords(VOID)
UINT FormatByteSize(LONGLONG cbSize, LPWSTR pwszResult, UINT cchResultMax)
#define EVENT_PARAMETER_MESSAGE_FILE
int APIENTRY wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow)
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM)
LPWSTR GetMessageStringFromDllList(IN LPCWSTR lpMessageDllList, IN DWORD dwFlags, IN DWORD dwMessageId, IN DWORD nSize, IN va_list *Arguments OPTIONAL)
PEVENTLOGRECORD * g_RecordPtrs
HANDLE hStartStopEnumEvent
BOOL GetEventMessageFileDLL(_In_ PCWSTR LogName, _In_ PCWSTR SourceName, _In_ PCWSTR EntryName, _Out_writes_z_(cchName) PWSTR pModuleName, _In_ SIZE_T cchName)
WCHAR szSaveFilter[MAX_LOADSTRING]
VOID FreeLogFilterList(VOID)
VOID EnumEvents(IN PEVENTLOGFILTER EventLogFilter)
VOID OpenUserEventLog(VOID)
static VOID SavePropertiesDlg(HWND hDlg, PEVENTLOG EventLog)
INT_PTR EventLogProperties(HINSTANCE, HWND, PEVENTLOGFILTER)
PEVENTLOGFILTER EnumFilter
HTREEITEM TreeViewAddItem(IN HWND hTreeView, IN HTREEITEM hParent, IN LPWSTR lpText, IN INT Image, IN INT SelectedImage, IN LPARAM lParam)
static HWND hWndDetailsCtrl
BOOL GetDisplayNameFileAndID(_In_ PCWSTR LogName, _Out_writes_z_(cchName) PWSTR pModuleName, _In_ SIZE_T cchName, _Out_ PDWORD pdwMessageID)
#define EVENT_MESSAGE_FILE_BUFFER
VOID SaveEventLog(IN PEVENTLOGFILTER EventLogFilter)
INT_PTR CALLBACK EventDetails(HWND, UINT, WPARAM, LPARAM)
PEVENTLOGFILTER AllocEventLogFilter(IN BOOL Information, IN BOOL Warning, IN BOOL Error, IN BOOL AuditSuccess, IN BOOL AuditFailure, IN PCWSTR Sources OPTIONAL, IN PCWSTR Users OPTIONAL, IN PCWSTR ComputerNames OPTIONAL, IN ULONG NumOfEventLogs, IN PEVENTLOG *EventLogs)
struct _SETTINGS SETTINGS
static DWORD WINAPI EnumEventsThread(IN LPVOID lpParameter)
#define EVENT_MESSAGE_FILE
WCHAR szTitle[MAX_LOADSTRING]
BOOL GetEventUserName(_In_ PEVENTLOGRECORD pelr, _Inout_ PSID *pLastSid, _Out_writes_z_(cchUser) PWSTR pszUser, _In_ SIZE_T cchUser)
LPWSTR FormatFileSizeWithBytes(const PULARGE_INTEGER lpQwSize, LPWSTR pwszResult, UINT cchResultMax)
BOOL InitInstance(HINSTANCE)
static VOID InitPropertiesDlg(HWND hDlg, PEVENTLOG EventLog)
#define ProgressBar_SetRange(hwndCtl, range)
#define ROUND_DOWN(n, align)
#define ProgressBar_SetPos(hwndCtl, pos)
struct _EVENTLOG * PEVENTLOG
#define StatusBar_SetText(hwndCtl, index, data)
#define StatusBar_GetItemRect(hwndCtl, index, lprc)
#define ProgressBar_SetStep(hwndCtl, inc)
#define EnableDlgItem(hDlg, nID, bEnable)
struct _EVENTLOGFILTER * PEVENTLOGFILTER
HWND CreateEventDetailsCtrl(HINSTANCE hInstance, HWND hParentWnd, LPARAM lParam)
struct _EVENTDETAIL_INFO * PEVENTDETAIL_INFO
struct _FileName FileName
_Must_inspect_result_ _Out_ PLARGE_INTEGER FileSize
GLint GLint GLint GLint GLint x
GLint GLint GLint GLint GLint GLint y
GLint GLint GLsizei width
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
HLOCAL NTAPI LocalFree(HLOCAL hMem)
_Check_return_ _CRTIMP int __cdecl swscanf(_In_z_ const wchar_t *_Src, _In_z_ _Scanf_format_string_ const wchar_t *_Format,...)
_Check_return_ _CRTIMP int __cdecl _wtoi(_In_z_ const wchar_t *_Str)
_Check_return_ _CRTIMP long __cdecl _wtol(_In_z_ const wchar_t *_Str)
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
_CONST_RETURN wchar_t *__cdecl wcsstr(_In_z_ const wchar_t *_Str, _In_z_ const wchar_t *_SubStr)
#define EXCEPTION_EXECUTE_HANDLER
#define InterlockedCompareExchangePointer
enum _SID_NAME_USE SID_NAME_USE
LPCWSTR LPCWSTR szModuleName
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
static DWORD DWORD void LPSTR DWORD cch
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
INT_PTR CALLBACK GeneralPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
#define _Out_writes_z_(s)
#define REG_OPTION_NON_VOLATILE
#define LOCALE_USER_DEFAULT
#define UNREFERENCED_PARAMETER(P)
_In_ ULONG _In_ ULONG _In_ ULONG Length
#define WS_OVERLAPPEDWINDOW
static const WCHAR szName[]
#define PropSheet_Changed(d, w)
#define PropSheet_UnChanged(d, w)
#define PSH_PROPSHEETPAGE
_Out_opt_ int _Out_opt_ int * cy
#define ListView_InsertItem(hwnd, pitem)
#define ListView_SetExtendedListViewStyleEx(hwndLV, dwMask, dw)
#define TreeView_SelectItem(hwnd, hitem)
#define ListView_InsertColumn(hwnd, iCol, pcol)
#define TVN_BEGINLABELEDIT
#define ListView_SetImageList(hwnd, himl, iImageList)
#define LVS_EX_HEADERDRAGDROP
#define LVS_SHOWSELALWAYS
#define TreeView_EnsureVisible(hwnd, hitem)
#define TreeView_GetParent(hwnd, hitem)
#define TVS_SHOWSELALWAYS
#define ListView_GetNextItem(hwnd, i, flags)
#define TreeView_GetSelection(hwnd)
#define TreeView_GetItem(hwnd, pitem)
#define LVS_EX_FULLROWSELECT
#define ListView_GetItemCount(hwnd)
struct tagNMITEMACTIVATE * LPNMITEMACTIVATE
#define ListView_SetExtendedListViewStyle(hwndLV, dw)
struct tagNMLISTVIEW * LPNMLISTVIEW
#define ListView_DeleteAllItems(hwnd)
#define ListView_SetItemText(hwndLV, i, iSubItem_, pszText_)
#define ImageList_AddIcon(himl, hicon)
#define TreeView_EditLabel(hwnd, hitem)
#define INDEXTOOVERLAYMASK(i)
#define TreeView_SetImageList(hwnd, himl, iImage)
#define TreeView_HitTest(hwnd, lpht)
#define TreeView_InsertItem(hwnd, lpis)
#define TVIF_SELECTEDIMAGE
#define ICC_LISTVIEW_CLASSES
#define TreeView_DeleteItem(hwnd, hitem)
#define _SEH2_EXCEPT(...)
_Check_return_ _CRTIMP int __cdecl _wcsicmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
_CRT_RESTORE_GCC_WARNINGS _Check_return_ _CRTIMP wchar_t *__cdecl wcstok(_Inout_opt_z_ wchar_t *_Str, _In_z_ const wchar_t *_Delim)
LPWSTR *WINAPI CommandLineToArgvW(LPCWSTR lpCmdline, int *numargs)
BOOL WINAPI ShellAboutW(HWND hWnd, LPCWSTR szApp, LPCWSTR szOtherStuff, HICON hIcon)
PULONG MinorVersion OPTIONAL
STRSAFEAPI StringCchPrintfW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszFormat,...)
STRSAFEAPI StringCchCopyExW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc, STRSAFE_LPWSTR *ppszDestEnd, size_t *pcchRemaining, STRSAFE_DWORD dwFlags)
STRSAFEAPI StringCchCatW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
STRSAFEAPI StringCchPrintfExW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPWSTR *ppszDestEnd, size_t *pcchRemaining, STRSAFE_DWORD dwFlags, STRSAFE_LPCWSTR pszFormat,...)
STRSAFEAPI StringCbCopyW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPCWSTR pszSrc)
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
STRSAFEAPI StringCbPrintfW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPCWSTR pszFormat,...)
STRSAFEAPI StringCchCopyNW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc, size_t cchToCopy)
STRSAFEAPI StringCbCatW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPCWSTR pszSrc)
base of all file and directory entries
PEVENTLOG EventLogs[ANYSIZE_ARRAY]
DWORD WINAPI WaitForMultipleObjects(IN DWORD nCount, IN CONST HANDLE *lpHandles, IN BOOL bWaitAll, IN DWORD dwMilliseconds)
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
HANDLE WINAPI DECLSPEC_HOTPATCH CreateEventW(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL, IN BOOL bManualReset, IN BOOL bInitialState, IN LPCWSTR lpName OPTIONAL)
BOOL WINAPI DECLSPEC_HOTPATCH SetEvent(IN HANDLE hEvent)
#define LANG_USER_DEFAULT
TW_UINT32 TW_UINT16 TW_UINT16 MSG
#define FIELD_OFFSET(t, f)
#define CONTAINING_RECORD(address, type, field)
struct _LARGE_INTEGER::@2415 u
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_POWER_POLICY_IDLE_SETTINGS Settings
_Must_inspect_result_ _In_ WDFDEVICE _In_ PCUNICODE_STRING KeyName
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFSTRING String
_In_ WDFREQUEST _In_ NTSTATUS _In_ ULONG_PTR Information
_In_ LPCSTR _Out_writes_to_opt_ cchDisplayName LPSTR lpDisplayName
DWORD WINAPI GetLastError(void)
#define FORMAT_MESSAGE_MAX_WIDTH_MASK
#define LOAD_LIBRARY_AS_DATAFILE
#define FORMAT_MESSAGE_IGNORE_INSERTS
#define FORMAT_MESSAGE_FROM_SYSTEM
#define FORMAT_MESSAGE_ALLOCATE_BUFFER
#define FORMAT_MESSAGE_ARGUMENT_ARRAY
#define FORMAT_MESSAGE_FROM_HMODULE
_In_ LPCSTR _Out_writes_bytes_to_opt_ cbSid PSID _Inout_ LPDWORD _Out_writes_to_opt_ cchReferencedDomainName LPSTR _Inout_ LPDWORD _Out_ PSID_NAME_USE peUse
*nSize LPSTR _Inout_ LPDWORD nSize
_In_ PSID _Out_writes_to_opt_ cchName LPSTR _Inout_ LPDWORD cchName
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
#define EVENTLOG_ERROR_TYPE
#define EVENTLOG_SEQUENTIAL_READ
#define EVENTLOG_AUDIT_FAILURE
#define EVENTLOG_INFORMATION_TYPE
#define EVENTLOG_AUDIT_SUCCESS
#define EVENTLOG_BACKWARDS_READ
#define EVENTLOG_FORWARDS_READ
#define EVENTLOG_WARNING_TYPE
struct _EVENTLOGRECORD * PEVENTLOGRECORD
#define HKEY_LOCAL_MACHINE
#define HKEY_CURRENT_USER
#define RegConnectRegistry
HWND WINAPI GetFocus(void)
HWND WINAPI SetCapture(_In_ HWND hWnd)
BOOL WINAPI IsWindow(_In_opt_ HWND)
#define GetWindowLongPtrW
BOOL WINAPI TranslateMessage(_In_ const MSG *)
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
BOOL WINAPI ReleaseCapture(void)
LRESULT WINAPI DefWindowProcW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
BOOL WINAPI GetMessageW(_Out_ LPMSG, _In_opt_ HWND, _In_ UINT, _In_ UINT)
BOOL WINAPI GetWindowPlacement(_In_ HWND, _Inout_ WINDOWPLACEMENT *)
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
BOOL WINAPI SetWindowPos(_In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
__analysis_noreturn void WINAPI PostQuitMessage(_In_ int)
HANDLE WINAPI LoadImageW(_In_opt_ HINSTANCE hInst, _In_ LPCWSTR name, _In_ UINT type, _In_ int cx, _In_ int cy, _In_ UINT fuLoad)
BOOL WINAPI GetCursorPos(_Out_ LPPOINT)
BOOL WINAPI SetDlgItemTextW(_In_ HWND, _In_ int, _In_ LPCWSTR)
HCURSOR WINAPI SetCursor(_In_opt_ HCURSOR)
HWND WINAPI GetCapture(void)
BOOL WINAPI EndDeferWindowPos(_In_ HDWP)
HCURSOR WINAPI LoadCursorW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
BOOL WINAPI TrackPopupMenuEx(_In_ HMENU, _In_ UINT, _In_ int, _In_ int, _In_ HWND, _In_opt_ LPTPMPARAMS)
int WINAPI MapWindowPoints(_In_opt_ HWND hWndFrom, _In_opt_ HWND hWndTo, _Inout_updates_(cPoints) LPPOINT lpPoints, _In_ UINT cPoints)
int WINAPI MessageBoxW(_In_opt_ HWND hWnd, _In_opt_ LPCWSTR lpText, _In_opt_ LPCWSTR lpCaption, _In_ UINT uType)
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
DWORD WINAPI CheckMenuItem(_In_ HMENU, _In_ UINT, _In_ UINT)
LRESULT WINAPI SendDlgItemMessageW(_In_ HWND, _In_ int, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
BOOL WINAPI SetWindowTextW(_In_ HWND, _In_opt_ LPCWSTR)
UINT WINAPI IsDlgButtonChecked(_In_ HWND, _In_ int)
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
BOOL WINAPI SetDlgItemInt(_In_ HWND, _In_ int, _In_ UINT, _In_ BOOL)
HMENU WINAPI GetSubMenu(_In_ HMENU, _In_ int)
HWND WINAPI SetFocus(_In_opt_ HWND)
HWND WINAPI CreateWindowExW(_In_ DWORD dwExStyle, _In_opt_ LPCWSTR lpClassName, _In_opt_ LPCWSTR lpWindowName, _In_ DWORD dwStyle, _In_ int X, _In_ int Y, _In_ int nWidth, _In_ int nHeight, _In_opt_ HWND hWndParent, _In_opt_ HMENU hMenu, _In_opt_ HINSTANCE hInstance, _In_opt_ LPVOID lpParam)
BOOL WINAPI UpdateWindow(_In_ HWND)
struct tagNMHDR * LPNMHDR
ATOM WINAPI RegisterClassExW(_In_ CONST WNDCLASSEXW *)
#define CreateWindowW(a, b, c, d, e, f, g, h, i, j, k)
BOOL WINAPI CheckMenuRadioItem(_In_ HMENU, _In_ UINT, _In_ UINT, _In_ UINT, _In_ UINT)
HWND WINAPI GetParent(_In_ HWND)
HACCEL WINAPI LoadAcceleratorsW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
#define SBS_SIZEBOXBOTTOMRIGHTALIGN
LRESULT WINAPI DispatchMessageW(_In_ const MSG *)
BOOL WINAPI CheckRadioButton(_In_ HWND, _In_ int, _In_ int, _In_ int)
#define MB_ICONINFORMATION
int WINAPI TranslateAcceleratorW(_In_ HWND, _In_ HACCEL, _In_ LPMSG)
HDWP WINAPI DeferWindowPos(_In_ HDWP, _In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
UINT WINAPI GetDlgItemInt(_In_ HWND, _In_ int, _Out_opt_ PBOOL, _In_ BOOL)
BOOL WINAPI InvalidateRect(_In_opt_ HWND, _In_opt_ LPCRECT, _In_ BOOL)
#define MAKEINTRESOURCEW(i)
HMENU WINAPI LoadMenuW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
#define SetWindowLongPtrW
BOOL WINAPI IsWindowVisible(_In_ HWND)
BOOL WINAPI DestroyWindow(_In_ HWND)
BOOL WINAPI EnableMenuItem(_In_ HMENU, _In_ UINT, _In_ UINT)
HICON WINAPI LoadIconW(_In_opt_ HINSTANCE hInstance, _In_ LPCWSTR lpIconName)
int WINAPI GetSystemMetrics(_In_ int)
BOOL WINAPI MoveWindow(_In_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ BOOL)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
HMENU WINAPI GetMenu(_In_ HWND)
BOOL WINAPI SetRect(_Out_ LPRECT, _In_ int, _In_ int, _In_ int, _In_ int)
INT_PTR WINAPI DialogBoxParamW(_In_opt_ HINSTANCE, _In_ LPCWSTR, _In_opt_ HWND, _In_opt_ DLGPROC, _In_ LPARAM)
HDWP WINAPI BeginDeferWindowPos(_In_ int)
BOOL WINAPI EndDialog(_In_ HWND, _In_ INT_PTR)
BOOL WINAPI ScreenToClient(_In_ HWND, _Inout_ LPPOINT)
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO