|
|
// FileSpyDoc.cpp : implementation of the CFileSpyDoc class
//
#include "stdafx.h"
#include "FileSpyApp.h"
#include "global.h"
#include "FileSpyDoc.h"
#include "filespyview.h"
#include "fastioview.h"
#include "fsfilterview.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__; #endif
/////////////////////////////////////////////////////////////////////////////
// CFileSpyDoc
IMPLEMENT_DYNCREATE(CFileSpyDoc, CDocument)
BEGIN_MESSAGE_MAP(CFileSpyDoc, CDocument) //{{AFX_MSG_MAP(CFileSpyDoc)
ON_COMMAND(ID_FILE_SAVE, OnFileSave) //}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CFileSpyDoc construction/destruction
CFileSpyDoc::CFileSpyDoc() { // TODO: add one-time construction code here
}
CFileSpyDoc::~CFileSpyDoc() { }
BOOL CFileSpyDoc::OnNewDocument() { if (!CDocument::OnNewDocument()) return FALSE;
// TODO: add reinitialization code here
// (SDI documents will reuse this document)
return TRUE; }
/////////////////////////////////////////////////////////////////////////////
// CFileSpyDoc serialization
void CFileSpyDoc::Serialize(CArchive& ar) { if (ar.IsStoring()) { // TODO: add storing code here
} else { // TODO: add loading code here
} }
/////////////////////////////////////////////////////////////////////////////
// CFileSpyDoc diagnostics
#ifdef _DEBUG
void CFileSpyDoc::AssertValid() const { CDocument::AssertValid(); }
void CFileSpyDoc::Dump(CDumpContext& dc) const { CDocument::Dump(dc); } #endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CFileSpyDoc commands
void CFileSpyDoc::OnFileSave() { // TODO: Add your command handler code here
OPENFILENAME OpenFileName; WCHAR sFilePath[1024]; WCHAR sFileName[1024]; WCHAR sFileStr[2048]; WCHAR sStr[1024]; WCHAR CRLF[3]; WCHAR TAB[1]; HANDLE hFile; long nSaved; int nMBRet, ti, nCount, tj; CFileSpyView *pIrp = (CFileSpyView *) pSpyView; CFastIoView *pFast = (CFastIoView *) pFastIoView; CFsFilterView *pFsFilter = (CFsFilterView *) pFsFilterView; DWORD nBytesWritten;
if (pIrp->GetListCtrl().GetItemCount() == 0 && pFast->GetListCtrl().GetItemCount() == 0) { MessageBox(NULL, L"Nothing to save", L"FileSpy", MB_OK); return; }
wcscpy(sFilePath, L"FILESPY.LOG"); sFileName[0] = 0; OpenFileName.lStructSize = sizeof(OpenFileName); OpenFileName.hwndOwner = AfxGetMainWnd()->m_hWnd; OpenFileName.hInstance = AfxGetInstanceHandle(); OpenFileName.Flags = OFN_HIDEREADONLY|OFN_NOREADONLYRETURN|OFN_PATHMUSTEXIST; OpenFileName.lpstrFilter = NULL; OpenFileName.lpstrCustomFilter = NULL; OpenFileName.nFilterIndex = 0; OpenFileName.lpstrFileTitle = sFileName; OpenFileName.nMaxFileTitle = 512; OpenFileName.lpstrInitialDir = NULL; OpenFileName.lpstrTitle = NULL; OpenFileName.lpstrDefExt = NULL; OpenFileName.lpfnHook = NULL; OpenFileName.lpstrFile = sFilePath; OpenFileName.nMaxFile = 512;
if (!GetSaveFileName(&OpenFileName)) { return; } hFile = CreateFile(sFilePath, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile != INVALID_HANDLE_VALUE) { nMBRet = MessageBox(NULL, L"The selected file already exists. Do you want to append to it?", L"FileSpy", MB_YESNOCANCEL); if (nMBRet == IDCANCEL) { return; } if (nMBRet == IDYES) { SetFilePointer(hFile, 0, NULL, FILE_END); } else { CloseHandle(hFile); hFile = CreateFile(sFilePath, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); } } else { hFile = CreateFile(sFilePath, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); } if (hFile == INVALID_HANDLE_VALUE) { MessageBox(NULL, L"File creation error", L"FileSpy - Error", MB_OK); return; }
CRLF[0] = 0x0D; CRLF[1] = 0x0A; CRLF[2] = 0; TAB[0] = 0x9; TAB[1] = 0;
WriteFile(hFile, CRLF, 2, &nBytesWritten, NULL); //
// Write IRP header string
//
//
// Start saving the traces now
// First save IRP traces and then FASTIO
//
nCount = pIrp->GetListCtrl().GetItemCount(); for (ti = 0; ti < nCount; ti++) { pIrp->GetListCtrl().GetItemText(ti, 0, sStr, 1024); wcscpy(sFileStr, sStr); for (tj = 1; tj < 10; tj++) { wcscat(sFileStr, TAB); pIrp->GetListCtrl().GetItemText(ti, tj, sStr, 1024); wcscat(sFileStr, sStr); } wcscat(sFileStr, CRLF); WriteFile(hFile, sFileStr, wcslen(sFileStr), &nBytesWritten, NULL); } nSaved = nCount;
//
// FastIO View now
//
nCount = pFast->GetListCtrl().GetItemCount(); for (ti = 0; ti < nCount; ti++) { pFast->GetListCtrl().GetItemText(ti, 0, sStr, 1024); wcscpy(sFileStr, sStr); for (tj = 1; tj < 11; tj++) { wcscat(sFileStr, TAB); pFast->GetListCtrl().GetItemText(ti, tj, sStr, 1024); wcscat(sFileStr, sStr); } wcscat(sFileStr, CRLF); WriteFile(hFile, sFileStr, wcslen(sFileStr), &nBytesWritten, NULL); } CloseHandle(hFile); nSaved += nCount; swprintf(sStr, L"%ld traces saved", nSaved); MessageBox(NULL, sStr, L"FileSpy", MB_OK); }
|