windows-nt/Source/XPSP1/NT/printscan/print/spooler/dbglib/dbgfil.cxx
2020-09-26 16:20:57 +08:00

161 lines
2.9 KiB
C++

/*++
Copyright (c) 1998-1999 Microsoft Corporation
All rights reserved.
Module Name:
dbgfil.cxx
Abstract:
Debug Device File
Author:
Steve Kiraly (SteveKi) 10-Dec-1995
Revision History:
--*/
#include "precomp.hxx"
#pragma hdrstop
#include "dbgfil.hxx"
//
// Construct the file device.
//
// pszConfiguration - contains the file name to open.
//
TDebugDeviceFile::
TDebugDeviceFile(
IN LPCTSTR pszConfiguration,
IN EDebugType eDebugType
) : TDebugDevice( pszConfiguration, eDebugType ),
_hFile( INVALID_HANDLE_VALUE )
{
TDebugDevice::TIterator i( this );
for( i.First(); !i.IsDone(); i.Next() )
{
//
// First item always contains the character type.
// We want the second item which is the file name.
//
if( i.Index() == 2 )
{
//
// Look for the file specifier.
//
_strFile.bUpdate( i.Current() );
break;
}
}
}
//
// Close the file device.
//
TDebugDeviceFile::
~TDebugDeviceFile(
)
{
if( _hFile && _hFile != INVALID_HANDLE_VALUE )
{
CloseHandle( _hFile );
}
}
//
// Indicates the file deveice object is valid.
//
BOOL
TDebugDeviceFile::
bValid(
VOID
)
{
return _strFile.bValid();
}
//
// Output the string to the debug file device
//
BOOL
TDebugDeviceFile::
bOutput (
IN UINT uSize,
IN LPBYTE pBuffer
)
{
BOOL bStatus = FALSE;
if( bValid( ) )
{
//
// Is eth file currently open, we delay this to the
// very last momemt.
//
if( _hFile == INVALID_HANDLE_VALUE )
{
_hFile = OpenOutputFile();
}
if( _hFile )
{
//
// Write the bytes to the file.
//
DWORD dwBytesWritten;
bStatus = WriteFile( _hFile,
pBuffer,
uSize,
&dwBytesWritten,
NULL );
//
// If the write failed or the number of bytes
// written did not match the request.
//
if( !bStatus || uSize != dwBytesWritten )
{
bStatus = FALSE;
}
}
}
return bStatus;
}
//
// Open the output file.
//
HANDLE
TDebugDeviceFile::
OpenOutputFile(
VOID
)
{
//
// Create the file.
//
HANDLE hFile = CreateFile( _strFile,
GENERIC_WRITE,
FILE_SHARE_READ,
NULL,
OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_WRITE_THROUGH,
NULL );
//
// If the file was not created, invalidate the handle.
//
if( hFile == INVALID_HANDLE_VALUE )
{
hFile = NULL;
}
return hFile;
}