mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1093 lines
28 KiB
1093 lines
28 KiB
//////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
//
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
#include <windows.h>
|
|
#include <stdio.h>
|
|
#include <commdlg.h>
|
|
#include "resource.h"
|
|
#include "..\new\logger.h"
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
// PROTOTYPES
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
static BOOL CreateMainWindow (int nCmdShow);
|
|
|
|
static LRESULT CALLBACK MainWndProc (HWND hwnd,
|
|
UINT uMsg,
|
|
WPARAM wParam,
|
|
LPARAM lParam);
|
|
BOOL LogFileNameProc();
|
|
BOOL DoStructKey();
|
|
BOOL DoPostKey();
|
|
BOOL DoPreKey();
|
|
void WriteToListBox(LPSTR lpszText, ...);
|
|
BOOL ReadInLogFile();
|
|
BOOL OpenLogFile();
|
|
BOOL ReadKey(LPDWORD lpdwKey);
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
// GLOBALS
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
HINSTANCE ghInstance;
|
|
HWND ghMainWnd;
|
|
HWND ghListWnd;
|
|
char gszLogFileName[MAX_PATH];
|
|
HANDLE ghLogFile;
|
|
|
|
LPSTR glpszFunctions[] =
|
|
{
|
|
"TSPI_lineAccept",
|
|
"TSPI_lineAddToConference",
|
|
"TSPI_lineAgentSpecific",
|
|
"TSPI_lineAnswer",
|
|
"TSPI_lineBlindTransfer",
|
|
"TSPI_lineClose",
|
|
"TSPI_lineCloseCall",
|
|
"TSPI_lineCompleteCall",
|
|
"TSPI_lineCompleteTransfer",
|
|
"TSPI_lineConditionalMediaDetection",
|
|
"TSPI_lineDevSpecific",
|
|
"TSPI_lineDevSpecificFeature",
|
|
"TSPI_lineDial",
|
|
"TSPI_lineDrop",
|
|
"TSPI_lineForward",
|
|
"TSPI_lineGatherDigits",
|
|
"TSPI_lineGenerateDigits",
|
|
"TSPI_lineGenerateTone",
|
|
"TSPI_lineGetAddressCaps",
|
|
"TSPI_lineGetAddressID",
|
|
"TSPI_lineGetAddressStatus",
|
|
"TSPI_lineGetAgentActivityList",
|
|
"TSPI_lineGetAgentCaps",
|
|
"TSPI_lineGetAgentGroupList",
|
|
"TSPI_lineGetAgentStatus",
|
|
"TSPI_lineGetCallAddressID",
|
|
"TSPI_lineGetCallInfo",
|
|
"TSPI_lineGetCallStatus",
|
|
"TSPI_lineGetDevCaps",
|
|
"TSPI_lineGetDevConfig",
|
|
"TSPI_lineGetExtensionID",
|
|
"TSPI_lineGetIcon",
|
|
"TSPI_lineGetID",
|
|
"TSPI_lineGetLineDevStatus",
|
|
"TSPI_lineGetNumAddressIDs",
|
|
"TSPI_lineHold",
|
|
"TSPI_lineMakeCall",
|
|
"TSPI_lineMonitorDigits",
|
|
"TSPI_lineMonitorMedia",
|
|
"TSPI_lineMonitorTones",
|
|
"TSPI_lineNegotiateExtVersion",
|
|
"TSPI_lineNegotiateTSPIVersion",
|
|
"TSPI_lineOpen",
|
|
"TSPI_linePark",
|
|
"TSPI_linePickup",
|
|
"TSPI_linePrepareAddToConference",
|
|
"TSPI_lineRedirect",
|
|
"TSPI_lineReleaseUserUserInfo",
|
|
"TSPI_lineRemoveFromConference",
|
|
"TSPI_lineSecureCall",
|
|
"TSPI_lineSelectExtVersion",
|
|
"TSPI_lineSendUserUserInfo",
|
|
"TSPI_lineSetAgentActivity",
|
|
"TSPI_lineSetAgentGroup",
|
|
"TSPI_lineSetAgentState",
|
|
"TSPI_lineSetAppSpecific",
|
|
"TSPI_lineSetCallData",
|
|
"TSPI_lineSetCallParams",
|
|
"TSPI_lineSetCallQualityOfService",
|
|
"TSPI_lineSetCallTreatment",
|
|
"TSPI_lineSetCurrentLocation",
|
|
"TSPI_lineSetDefaultMediaDetection",
|
|
"TSPI_lineSetDevConfig",
|
|
"TSPI_lineSetLineDevStatus",
|
|
"TSPI_lineSetMediaControl",
|
|
"TSPI_lineSetMediaMode",
|
|
"TSPI_lineSetStatusMessages",
|
|
"TSPI_lineSetTerminal",
|
|
"TSPI_lineSetupConference",
|
|
"TSPI_lineSetupTransfer",
|
|
"TSPI_lineSwapHold",
|
|
"TSPI_lineUncompleteCall",
|
|
"TSPI_lineUnhold",
|
|
"TSPI_lineUnpark",
|
|
"TSPI_phoneClose",
|
|
"TSPI_phoneDevSpecific",
|
|
"TSPI_phoneGetButtonInfo",
|
|
"TSPI_phoneGetData",
|
|
"TSPI_phoneGetDevCaps",
|
|
"TSPI_phoneGetDisplay",
|
|
"TSPI_phoneGetExtensionID",
|
|
"TSPI_phoneGetGain",
|
|
"TSPI_phoneGetHookSwitch",
|
|
"TSPI_phoneGetIcon",
|
|
"TSPI_phoneGetID",
|
|
"TSPI_phoneGetLamp",
|
|
"TSPI_phoneGetRing",
|
|
"TSPI_phoneGetStatus",
|
|
"TSPI_phoneGetVolume",
|
|
"TSPI_phoneNegotiateExtVersion",
|
|
"TSPI_phoneNegotiateTSPIVersion",
|
|
"TSPI_phoneOpen",
|
|
"TSPI_phoneSelectExtVersion",
|
|
"TSPI_phoneSetButtonInfo",
|
|
"TSPI_phoneSetData",
|
|
"TSPI_phoneSetDisplay",
|
|
"TSPI_phoneSetGain",
|
|
"TSPI_phoneSetHookSwitch",
|
|
"TSPI_phoneSetLamp",
|
|
"TSPI_phoneSetRing",
|
|
"TSPI_phoneSetStatusMessages",
|
|
"TSPI_phoneSetVolume",
|
|
"TSPI_providerCreateLineDevice",
|
|
"TSPI_providerCreatePhoneDevice",
|
|
"TSPI_providerEnumDevices",
|
|
"TSPI_providerFreeDialogInstance",
|
|
"TSPI_providerGenericDialogData",
|
|
"TSPI_providerInit",
|
|
"TSPI_providerShutdown",
|
|
"TSPI_providerUIIdentify",
|
|
NULL
|
|
};
|
|
|
|
LPSTR glpszMessages[] =
|
|
{
|
|
"LINE_ADDRESSSTATE",
|
|
"LINE_CALLINFO",
|
|
"LINE_CALLSTATE",
|
|
"LINE_CLOSE",
|
|
"LINE_DEVSPECIFIC",
|
|
"LINE_DEVSPECIFICFEATURE",
|
|
"LINE_GATHERDIGITS",
|
|
"LINE_GENERATE",
|
|
"LINE_LINEDEVSTATE",
|
|
"LINE_MONITORDIGITS",
|
|
"LINE_MONITORMEDIA",
|
|
"LINE_MONITORTONE",
|
|
"LINE_REPLY",
|
|
"LINE_REQUEST",
|
|
"PHONE_BUTTON",
|
|
"PHONE_CLOSE",
|
|
"PHONE_DEVSPECIFIC",
|
|
"PHONE_REPLY",
|
|
"PHONE_STATE",
|
|
"LINE_CREATE",
|
|
"PHONE_CREATE",
|
|
"LINE_AGENTSPECIFIC",
|
|
"LINE_AGENTSTATUS",
|
|
"LINE_APPNEWCALL",
|
|
"LINE_PROXYREQUEST",
|
|
"LINE_REMOVE",
|
|
"PHONE_REMOVE"
|
|
};
|
|
|
|
LPSTR glpszMessages500[] =
|
|
{
|
|
"LINE_NEWCALL",
|
|
"LINE_CALLDEVSPECIFIC",
|
|
"LINE_CALLDEVSPECIFICFEATURE",
|
|
"LINE_CREATEDIALOGINSTANCE",
|
|
"LINE_SENDDIALOGINSTANCEDATA"
|
|
};
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// WinMain()
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
int WINAPI WinMain (HINSTANCE hInstance,
|
|
HINSTANCE hPrevInstance,
|
|
LPSTR lpszCmdLine,
|
|
int nCmdShow)
|
|
{
|
|
MSG msg;
|
|
|
|
ghInstance = hInstance;
|
|
|
|
if (!CreateMainWindow(nCmdShow))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
while (GetMessage(&msg, NULL, 0, 0))
|
|
{
|
|
TranslateMessage(&msg);
|
|
DispatchMessage(&msg);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
|
|
//*****************************************************************************
|
|
// CreateMainWindow()
|
|
//*****************************************************************************
|
|
|
|
BOOL CreateMainWindow (int nCmdShow)
|
|
{
|
|
WNDCLASS wc;
|
|
static char szClassName[] = "TapiClientWndClass";
|
|
|
|
wc.style = 0;
|
|
wc.lpfnWndProc = MainWndProc;
|
|
wc.cbClsExtra = 0;
|
|
wc.cbWndExtra = 0;
|
|
wc.hInstance = ghInstance;
|
|
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
|
|
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
|
|
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
|
|
wc.lpszMenuName = MAKEINTRESOURCE(IDR_REPAPPMENU);
|
|
wc.lpszClassName = szClassName;
|
|
|
|
|
|
if (!RegisterClass(&wc))
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
ghMainWnd = CreateWindow(szClassName,
|
|
"Repeater Log App",
|
|
WS_OVERLAPPEDWINDOW,
|
|
0,
|
|
0,
|
|
GetSystemMetrics(SM_CXSCREEN)/2,
|
|
GetSystemMetrics(SM_CYSCREEN)/2,
|
|
NULL,
|
|
NULL,
|
|
ghInstance,
|
|
NULL);
|
|
|
|
ghListWnd = CreateWindow("LISTBOX",
|
|
NULL,
|
|
WS_CHILD | WS_VISIBLE | WS_VSCROLL | LBS_USETABSTOPS,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
ghMainWnd,
|
|
NULL,
|
|
ghInstance,
|
|
NULL);
|
|
|
|
if (ghListWnd == NULL)
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
if (ghMainWnd == NULL)
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
ShowWindow(ghMainWnd, nCmdShow);
|
|
UpdateWindow(ghMainWnd);
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
//*****************************************************************************
|
|
// MainWndProc()
|
|
//*****************************************************************************
|
|
|
|
LRESULT CALLBACK MainWndProc (HWND hwnd,
|
|
UINT uMsg,
|
|
WPARAM wParam,
|
|
LPARAM lParam)
|
|
{
|
|
switch (uMsg)
|
|
{
|
|
|
|
case WM_SIZE:
|
|
{
|
|
RECT rc;
|
|
|
|
GetClientRect(hwnd,
|
|
&rc);
|
|
|
|
MoveWindow(ghListWnd,
|
|
0, 0,
|
|
rc.right,
|
|
rc.bottom,
|
|
TRUE);
|
|
|
|
break;
|
|
}
|
|
case WM_COMMAND:
|
|
{
|
|
if (LOWORD(wParam) == ID_FILE_EXIT)
|
|
{
|
|
DestroyWindow(hwnd);
|
|
break;
|
|
}
|
|
|
|
if (LOWORD(wParam) == ID_FILE_LOGFILENAME)
|
|
{
|
|
if (LogFileNameProc())
|
|
{
|
|
SendMessage(ghListWnd,
|
|
LB_RESETCONTENT,
|
|
0,
|
|
0);
|
|
|
|
ReadInLogFile();
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
return DefWindowProc(hwnd, uMsg, wParam, lParam);
|
|
}
|
|
case WM_DESTROY:
|
|
PostQuitMessage(0);
|
|
break;
|
|
|
|
default:
|
|
return DefWindowProc(hwnd, uMsg, wParam, lParam);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
BOOL LogFileNameProc()
|
|
{
|
|
OPENFILENAME ofn;
|
|
BOOL bReturn;
|
|
|
|
gszLogFileName[0] = '\0';
|
|
|
|
ofn.lStructSize = sizeof(ofn);
|
|
ofn.hwndOwner = ghMainWnd;
|
|
ofn.hInstance = ghInstance;
|
|
ofn.lpstrFilter = "Log Files\0*.log\0\0";
|
|
ofn.lpstrCustomFilter = NULL;
|
|
ofn.nMaxCustFilter = 0;
|
|
ofn.nFilterIndex = 0;
|
|
ofn.lpstrFile = gszLogFileName;
|
|
ofn.nMaxFile = MAX_PATH;
|
|
ofn.lpstrFileTitle = NULL;
|
|
ofn.nMaxFileTitle = 0;
|
|
ofn.lpstrInitialDir = NULL;
|
|
ofn.lpstrTitle =NULL;
|
|
ofn.Flags = OFN_FILEMUSTEXIST;
|
|
ofn.nFileOffset = 0;
|
|
ofn.nFileExtension = 0;
|
|
ofn.lpstrDefExt = "LOG";
|
|
ofn.lCustData = 0;
|
|
ofn.lpfnHook = NULL;
|
|
ofn.lpTemplateName = NULL;
|
|
|
|
bReturn = GetOpenFileName(&ofn);
|
|
|
|
return bReturn;
|
|
}
|
|
|
|
BOOL ReadInLogFile()
|
|
{
|
|
DWORD dwKey;
|
|
|
|
if (!OpenLogFile())
|
|
{
|
|
MessageBox(NULL,
|
|
"Couldn't open file",
|
|
NULL,
|
|
MB_OK);
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
while (TRUE)
|
|
{
|
|
if (!ReadKey(&dwKey))
|
|
{
|
|
// MessageBox(NULL,
|
|
// "Couldn't readkey",
|
|
// NULL,
|
|
// MB_OK);
|
|
break;
|
|
}
|
|
|
|
else if (dwKey == DWPREKEY)
|
|
{
|
|
if (!DoPreKey())
|
|
{
|
|
// MessageBox(NULL,
|
|
// "Couldn't do pre key",
|
|
// NULL,
|
|
// MB_OK);
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
else if (dwKey == DWPOSTKEY)
|
|
{
|
|
if (!DoPostKey())
|
|
{
|
|
// MessageBox(NULL,
|
|
// "Couldn't do post key",
|
|
// NULL,
|
|
// MB_OK);
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
else if (dwKey == DWSTRCKEY)
|
|
{
|
|
if (!DoStructKey())
|
|
{
|
|
// MessageBox(NULL,
|
|
// "Couldn't do struct key",
|
|
// NULL,
|
|
// MB_OK);
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
else
|
|
{
|
|
MessageBox(NULL,
|
|
"Error reading in log file",
|
|
NULL,
|
|
MB_OK);
|
|
break;
|
|
}
|
|
} // while
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL OpenLogFile()
|
|
{
|
|
ghLogFile = CreateFile(gszLogFileName,
|
|
GENERIC_READ,
|
|
FILE_SHARE_READ, //0,
|
|
NULL,
|
|
OPEN_EXISTING,
|
|
FILE_ATTRIBUTE_NORMAL,
|
|
NULL);
|
|
|
|
if (ghLogFile == INVALID_HANDLE_VALUE)
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
SetFilePointer(ghLogFile,
|
|
0,
|
|
NULL,
|
|
FILE_BEGIN);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL ReadKey(LPDWORD lpdwKey)
|
|
{
|
|
DWORD dwSize;
|
|
|
|
if (!ReadFile(ghLogFile,
|
|
lpdwKey,
|
|
sizeof(DWORD),
|
|
&dwSize,
|
|
NULL))
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
if (dwSize == 0)
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
SetFilePointer(ghLogFile,
|
|
0-dwSize,
|
|
NULL,
|
|
FILE_CURRENT);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL DoPreKey()
|
|
{
|
|
PREHEADER PreHeader;
|
|
DWORD dwSize;
|
|
|
|
if (!ReadFile(ghLogFile,
|
|
&PreHeader,
|
|
sizeof(PreHeader),
|
|
&dwSize,
|
|
NULL))
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
if (dwSize == 0)
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
if (dwSize != sizeof(PreHeader))
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
WriteToListBox("PreHeader - Time: %lu Type: %lu",
|
|
PreHeader.dwTime,
|
|
PreHeader.dwType);
|
|
|
|
switch(PreHeader.dwType)
|
|
{
|
|
case LINEMSG:
|
|
{
|
|
LINEMSGSTRUCT LineMsg;
|
|
LPSTR lpszMsg;
|
|
|
|
if (!ReadFile(ghLogFile,
|
|
&LineMsg,
|
|
sizeof(LineMsg),
|
|
&dwSize,
|
|
NULL))
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
if (dwSize == 0)
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
if (LineMsg.dwMsg < 500)
|
|
{
|
|
lpszMsg = glpszMessages[LineMsg.dwMsg];
|
|
}
|
|
else
|
|
{
|
|
lpszMsg = glpszMessages500[LineMsg.dwMsg-500];
|
|
}
|
|
|
|
WriteToListBox("\tLine Message: %s",
|
|
lpszMsg);
|
|
WriteToListBox("\t\thtLine: %lx, htCall: %lx",
|
|
LineMsg.htLine,
|
|
LineMsg.htCall);
|
|
WriteToListBox("\t\tdwParam1: %lx, dwParam2: %lx, dwParam3: %lx",
|
|
LineMsg.dw1,
|
|
LineMsg.dw2,
|
|
LineMsg.dw3);
|
|
|
|
break;
|
|
}
|
|
|
|
case PHONEMSG:
|
|
{
|
|
PHONEMSGSTRUCT PhoneMsg;
|
|
LPSTR lpszMsg;
|
|
|
|
if (!ReadFile(ghLogFile,
|
|
&PhoneMsg,
|
|
sizeof(PhoneMsg),
|
|
&dwSize,
|
|
NULL))
|
|
{
|
|
return FALSE;
|
|
}
|
|
if (dwSize == 0)
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
if (PhoneMsg.dwMsg < 500)
|
|
{
|
|
lpszMsg = glpszMessages[PhoneMsg.dwMsg];
|
|
}
|
|
else
|
|
{
|
|
lpszMsg = glpszMessages500[PhoneMsg.dwMsg-500];
|
|
}
|
|
|
|
|
|
WriteToListBox("\tPhone Message: %s",
|
|
lpszMsg);
|
|
WriteToListBox("\t\thtPhone: %lx",
|
|
PhoneMsg.htPhone);
|
|
WriteToListBox("\t\tdwParam1: %lx, dwParam2: %lx, dwParam3: %lx",
|
|
PhoneMsg.dw1,
|
|
PhoneMsg.dw2,
|
|
PhoneMsg.dw3);
|
|
|
|
break;
|
|
}
|
|
|
|
case ASYNCMSG:
|
|
{
|
|
ASYNCSTRUCT AsyncMsg;
|
|
|
|
if (!ReadFile(ghLogFile,
|
|
&AsyncMsg,
|
|
sizeof(AsyncMsg),
|
|
&dwSize,
|
|
NULL))
|
|
{
|
|
return FALSE;
|
|
}
|
|
if (dwSize == 0)
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
WriteToListBox("\tAsync Message - dwRequestID: %lx, lResult: %lx",
|
|
AsyncMsg.dwRequestID,
|
|
AsyncMsg.lResult);
|
|
|
|
break;
|
|
}
|
|
|
|
case SPFUNC1:
|
|
{
|
|
LOGSPFUNC1 LogStruct;
|
|
|
|
if (!ReadFile(ghLogFile,
|
|
&LogStruct,
|
|
sizeof(LogStruct),
|
|
&dwSize,
|
|
NULL))
|
|
{
|
|
return FALSE;
|
|
}
|
|
if (dwSize == 0)
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
WriteToListBox("\tFunction: %s",
|
|
glpszFunctions[LogStruct.dwSPFUNC]);
|
|
WriteToListBox("\tParam1: %lx",
|
|
LogStruct.dwParam1);
|
|
break;
|
|
}
|
|
|
|
case SPFUNC2:
|
|
{
|
|
LOGSPFUNC2 LogStruct;
|
|
|
|
if (!ReadFile(ghLogFile,
|
|
&LogStruct,
|
|
sizeof(LogStruct),
|
|
&dwSize,
|
|
NULL))
|
|
{
|
|
return FALSE;
|
|
}
|
|
if (dwSize == 0)
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
WriteToListBox("\tFunction: %s",
|
|
glpszFunctions[LogStruct.dwSPFUNC]);
|
|
WriteToListBox("\tParam1: %lx",
|
|
LogStruct.dwParam1);
|
|
WriteToListBox("\tParam2: %lx",
|
|
LogStruct.dwParam2);
|
|
|
|
break;
|
|
}
|
|
case SPFUNC3:
|
|
{
|
|
LOGSPFUNC3 LogStruct;
|
|
|
|
if (!ReadFile(ghLogFile,
|
|
&LogStruct,
|
|
sizeof(LogStruct),
|
|
&dwSize,
|
|
NULL))
|
|
{
|
|
return FALSE;
|
|
}
|
|
if (dwSize == 0)
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
WriteToListBox("\tFunction: %s",
|
|
glpszFunctions[LogStruct.dwSPFUNC]);
|
|
WriteToListBox("\tParam1: %lx",
|
|
LogStruct.dwParam1);
|
|
WriteToListBox("\tParam2: %lx",
|
|
LogStruct.dwParam2);
|
|
WriteToListBox("\tParam3: %lx",
|
|
LogStruct.dwParam3);
|
|
|
|
break;
|
|
}
|
|
|
|
case SPFUNC4:
|
|
{
|
|
LOGSPFUNC4 LogStruct;
|
|
|
|
if (!ReadFile(ghLogFile,
|
|
&LogStruct,
|
|
sizeof(LogStruct),
|
|
&dwSize,
|
|
NULL))
|
|
{
|
|
return FALSE;
|
|
}
|
|
if (dwSize == 0)
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
WriteToListBox("\tFunction: %s",
|
|
glpszFunctions[LogStruct.dwSPFUNC]);
|
|
WriteToListBox("\tParam1: %lx",
|
|
LogStruct.dwParam1);
|
|
WriteToListBox("\tParam2: %lx",
|
|
LogStruct.dwParam2);
|
|
WriteToListBox("\tParam3: %lx",
|
|
LogStruct.dwParam3);
|
|
WriteToListBox("\tParam4: %lx",
|
|
LogStruct.dwParam4);
|
|
|
|
break;
|
|
}
|
|
|
|
case SPFUNC5:
|
|
{
|
|
LOGSPFUNC5 LogStruct;
|
|
|
|
if (!ReadFile(ghLogFile,
|
|
&LogStruct,
|
|
sizeof(LogStruct),
|
|
&dwSize,
|
|
NULL))
|
|
{
|
|
return FALSE;
|
|
}
|
|
if (dwSize == 0)
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
WriteToListBox("\tFunction: %s",
|
|
glpszFunctions[LogStruct.dwSPFUNC]);
|
|
WriteToListBox("\tParam1: %lx",
|
|
LogStruct.dwParam1);
|
|
WriteToListBox("\tParam2: %lx",
|
|
LogStruct.dwParam2);
|
|
WriteToListBox("\tParam3: %lx",
|
|
LogStruct.dwParam3);
|
|
WriteToListBox("\tParam4: %lx",
|
|
LogStruct.dwParam4);
|
|
WriteToListBox("\tParam5: %lx",
|
|
LogStruct.dwParam5);
|
|
|
|
break;
|
|
}
|
|
|
|
case SPFUNC6:
|
|
{
|
|
LOGSPFUNC6 LogStruct;
|
|
|
|
if (!ReadFile(ghLogFile,
|
|
&LogStruct,
|
|
sizeof(LogStruct),
|
|
&dwSize,
|
|
NULL))
|
|
{
|
|
return FALSE;
|
|
}
|
|
if (dwSize == 0)
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
WriteToListBox("\tFunction: %s",
|
|
glpszFunctions[LogStruct.dwSPFUNC]);
|
|
WriteToListBox("\tParam1: %lx",
|
|
LogStruct.dwParam1);
|
|
WriteToListBox("\tParam2: %lx",
|
|
LogStruct.dwParam2);
|
|
WriteToListBox("\tParam3: %lx",
|
|
LogStruct.dwParam3);
|
|
WriteToListBox("\tParam4: %lx",
|
|
LogStruct.dwParam4);
|
|
WriteToListBox("\tParam5: %lx",
|
|
LogStruct.dwParam5);
|
|
WriteToListBox("\tParam6: %lx",
|
|
LogStruct.dwParam6);
|
|
|
|
break;
|
|
}
|
|
|
|
case SPFUNC7:
|
|
{
|
|
LOGSPFUNC7 LogStruct;
|
|
|
|
if (!ReadFile(ghLogFile,
|
|
&LogStruct,
|
|
sizeof(LogStruct),
|
|
&dwSize,
|
|
NULL))
|
|
{
|
|
return FALSE;
|
|
}
|
|
if (dwSize == 0)
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
WriteToListBox("\tFunction: %s",
|
|
glpszFunctions[LogStruct.dwSPFUNC]);
|
|
WriteToListBox("\tParam1: %lx",
|
|
LogStruct.dwParam1);
|
|
WriteToListBox("\tParam2: %lx",
|
|
LogStruct.dwParam2);
|
|
WriteToListBox("\tParam3: %lx",
|
|
LogStruct.dwParam3);
|
|
WriteToListBox("\tParam4: %lx",
|
|
LogStruct.dwParam4);
|
|
WriteToListBox("\tParam5: %lx",
|
|
LogStruct.dwParam5);
|
|
WriteToListBox("\tParam6: %lx",
|
|
LogStruct.dwParam6);
|
|
WriteToListBox("\tParam7: %lx",
|
|
LogStruct.dwParam7);
|
|
|
|
break;
|
|
}
|
|
|
|
case SPFUNC8:
|
|
{
|
|
LOGSPFUNC8 LogStruct;
|
|
|
|
if (!ReadFile(ghLogFile,
|
|
&LogStruct,
|
|
sizeof(LogStruct),
|
|
&dwSize,
|
|
NULL))
|
|
{
|
|
return FALSE;
|
|
}
|
|
if (dwSize == 0)
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
WriteToListBox("\tFunction: %s",
|
|
glpszFunctions[LogStruct.dwSPFUNC]);
|
|
WriteToListBox("\tParam1: %lx",
|
|
LogStruct.dwParam1);
|
|
WriteToListBox("\tParam2: %lx",
|
|
LogStruct.dwParam2);
|
|
WriteToListBox("\tParam3: %lx",
|
|
LogStruct.dwParam3);
|
|
WriteToListBox("\tParam4: %lx",
|
|
LogStruct.dwParam4);
|
|
WriteToListBox("\tParam5: %lx",
|
|
LogStruct.dwParam5);
|
|
WriteToListBox("\tParam6: %lx",
|
|
LogStruct.dwParam6);
|
|
WriteToListBox("\tParam7: %lx",
|
|
LogStruct.dwParam7);
|
|
WriteToListBox("\tParam8: %lx",
|
|
LogStruct.dwParam8);
|
|
|
|
break;
|
|
}
|
|
|
|
case SPFUNC9:
|
|
{
|
|
LOGSPFUNC9 LogStruct;
|
|
|
|
if (!ReadFile(ghLogFile,
|
|
&LogStruct,
|
|
sizeof(LogStruct),
|
|
&dwSize,
|
|
NULL))
|
|
{
|
|
return FALSE;
|
|
}
|
|
if (dwSize == 0)
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
WriteToListBox("\tFunction: %s",
|
|
glpszFunctions[LogStruct.dwSPFUNC]);
|
|
WriteToListBox("\tParam1: %lx",
|
|
LogStruct.dwParam1);
|
|
WriteToListBox("\tParam2: %lx",
|
|
LogStruct.dwParam2);
|
|
WriteToListBox("\tParam3: %lx",
|
|
LogStruct.dwParam3);
|
|
WriteToListBox("\tParam4: %lx",
|
|
LogStruct.dwParam4);
|
|
WriteToListBox("\tParam5: %lx",
|
|
LogStruct.dwParam5);
|
|
WriteToListBox("\tParam6: %lx",
|
|
LogStruct.dwParam6);
|
|
WriteToListBox("\tParam7: %lx",
|
|
LogStruct.dwParam7);
|
|
WriteToListBox("\tParam8: %lx",
|
|
LogStruct.dwParam8);
|
|
WriteToListBox("\tParam9: %lx",
|
|
LogStruct.dwParam9);
|
|
|
|
break;
|
|
}
|
|
|
|
case SPFUNC12:
|
|
{
|
|
LOGSPFUNC12 LogStruct;
|
|
|
|
if (!ReadFile(ghLogFile,
|
|
&LogStruct,
|
|
sizeof(LogStruct),
|
|
&dwSize,
|
|
NULL))
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
if (dwSize == 0)
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
WriteToListBox("\tFunction: %s",
|
|
glpszFunctions[LogStruct.dwSPFUNC]);
|
|
WriteToListBox("\tParam1: %lx",
|
|
LogStruct.dwParam1);
|
|
WriteToListBox("\tParam2: %lx",
|
|
LogStruct.dwParam2);
|
|
WriteToListBox("\tParam3: %lx",
|
|
LogStruct.dwParam3);
|
|
WriteToListBox("\tParam4: %lx",
|
|
LogStruct.dwParam4);
|
|
WriteToListBox("\tParam5: %lx",
|
|
LogStruct.dwParam5);
|
|
WriteToListBox("\tParam6: %lx",
|
|
LogStruct.dwParam6);
|
|
WriteToListBox("\tParam7: %lx",
|
|
LogStruct.dwParam7);
|
|
WriteToListBox("\tParam8: %lx",
|
|
LogStruct.dwParam8);
|
|
WriteToListBox("\tParam9: %lx",
|
|
LogStruct.dwParam9);
|
|
WriteToListBox("\tParam11: %lx",
|
|
LogStruct.dwParam10);
|
|
WriteToListBox("\tParam11: %lx",
|
|
LogStruct.dwParam11);
|
|
WriteToListBox("\tParam12: %lx",
|
|
LogStruct.dwParam12);
|
|
|
|
break;
|
|
}
|
|
|
|
} // switch
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
BOOL DoPostKey()
|
|
{
|
|
POSTSTRUCT PostStruct;
|
|
DWORD dwSize;
|
|
|
|
if (!ReadFile(ghLogFile,
|
|
&PostStruct,
|
|
sizeof(PostStruct),
|
|
&dwSize,
|
|
NULL))
|
|
{
|
|
return FALSE;
|
|
}
|
|
if (dwSize == 0)
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
WriteToListBox("Post Struct - dwTime: %lu, lReturn: %lx",
|
|
PostStruct.dwTime,
|
|
PostStruct.lReturn);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL DoStructKey()
|
|
{
|
|
STRUCTHEADER StructHeader;
|
|
DWORD dwSize;
|
|
LPVOID pBuffer;
|
|
|
|
if (!ReadFile(ghLogFile,
|
|
&StructHeader,
|
|
sizeof(StructHeader),
|
|
&dwSize,
|
|
NULL))
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
if (dwSize == 0)
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
WriteToListBox("Struct Header - dwSize: %lu, dwID: %lx",
|
|
StructHeader.dwSize,
|
|
StructHeader.dwID);
|
|
|
|
if (StructHeader.dwSize == 0)
|
|
{
|
|
return TRUE;
|
|
}
|
|
|
|
pBuffer = GlobalAlloc(GPTR, StructHeader.dwSize);
|
|
|
|
// read in structure, but don't do anything with it for now
|
|
if (!ReadFile(ghLogFile,
|
|
pBuffer,
|
|
StructHeader.dwSize,
|
|
&dwSize,
|
|
NULL))
|
|
{
|
|
GlobalFree(pBuffer);
|
|
return FALSE;
|
|
}
|
|
if (dwSize == 0)
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
GlobalFree(pBuffer);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
void WriteToListBox(LPSTR lpszText, ...)
|
|
{
|
|
char szBuffer[1024];
|
|
va_list list;
|
|
|
|
va_start(list,lpszText);
|
|
|
|
vsprintf(szBuffer,lpszText,list);
|
|
|
|
SendMessage(ghListWnd,
|
|
LB_ADDSTRING,
|
|
0,
|
|
(LPARAM)szBuffer);
|
|
}
|
|
|