224 lines
7.7 KiB
C
224 lines
7.7 KiB
C
/*****************************************************************************
|
||
******************************************************************************
|
||
*
|
||
* ******************************************
|
||
* * Copyright (c) 1996, Cirrus Logic, Inc. *
|
||
* * All Rights Reserved *
|
||
* ******************************************
|
||
*
|
||
* PROJECT: Laguna I (CL-GD546x) -
|
||
*
|
||
* FILE: logfile.c
|
||
*
|
||
* AUTHOR: Sue Schell
|
||
*
|
||
* DESCRIPTION:
|
||
* This file contains routines that create and write to
|
||
* the log file, used for debugging and testing purposes
|
||
* only.
|
||
*
|
||
* MODULES:
|
||
* CreateLogFile()
|
||
* WriteLogFile()
|
||
* CloseLogFile()
|
||
*
|
||
* REVISION HISTORY:
|
||
*
|
||
* $Log: X:/log/laguna/nt35/miniport/cl546x/logfile.c $
|
||
*
|
||
* Rev 1.2 03 Dec 1996 15:34:34 SueS
|
||
* When CreateLogFile is called, do not overwrite the existing file. In the
|
||
* DirectDraw tests, DrvEnablePDEV is called numerous times, which wiped
|
||
* out the log file. Also, open and append to the log file each time, instead
|
||
* of attaching to the creating process.
|
||
*
|
||
* Rev 1.1 26 Nov 1996 08:52:06 SueS
|
||
* When the log file is opened, get the system process that owns the handle.
|
||
* Switch to this process when writing to the file. Otherwise, only the
|
||
* process that owns the handle can write to the file.
|
||
*
|
||
* Rev 1.0 13 Nov 1996 15:32:42 SueS
|
||
* Initial revision.
|
||
*
|
||
****************************************************************************
|
||
****************************************************************************/
|
||
|
||
|
||
/////////////////////
|
||
// Include Files //
|
||
/////////////////////
|
||
#include <ntddk.h> // various NT definitions
|
||
#include "type.h"
|
||
#include "logfile.h"
|
||
|
||
|
||
////////////////////////
|
||
// Global Variables //
|
||
////////////////////////
|
||
#if LOG_FILE
|
||
|
||
HANDLE LogFileHandle; // Handle for log file
|
||
UNICODE_STRING FileName; // Unicode string name of log file
|
||
OBJECT_ATTRIBUTES ObjectAttributes; // File object attributes
|
||
IO_STATUS_BLOCK IoStatus; // Returned status information
|
||
LARGE_INTEGER MaxFileSize; // File size
|
||
NTSTATUS Status; // Returned status
|
||
|
||
//////////////////////////
|
||
// External Functions //
|
||
//////////////////////////
|
||
|
||
|
||
///////////////////////////////////////////////////////////////////////////////
|
||
//
|
||
// HANDLE CreateLogFile(void)
|
||
//
|
||
// Parameters:
|
||
// none
|
||
//
|
||
// Return:
|
||
// the handle of the just-opened log file
|
||
//
|
||
// Notes:
|
||
//
|
||
// This function uses kernel mode support routines to open the
|
||
// log file, used to log activity in the display driver.
|
||
//
|
||
///////////////////////////////////////////////////////////////////////////////
|
||
HANDLE CreateLogFile(void)
|
||
{
|
||
HANDLE FileHandle; // Handle to opened file
|
||
|
||
|
||
// Initialize a Unicode String containing the name of
|
||
// the file to be opened and read.
|
||
RtlInitUnicodeString(&FileName, L"\\DosDevices\\C:\\temp\\CL546x.LOG");
|
||
|
||
// Initialize file attributes
|
||
InitializeObjectAttributes(&ObjectAttributes, // initialized attrib
|
||
&FileName, // full file path name
|
||
OBJ_CASE_INSENSITIVE, // attributes
|
||
NULL, // root directory
|
||
NULL); // security descriptor
|
||
|
||
// Open the file, creating it if necessary
|
||
MaxFileSize.QuadPart = 20000000;
|
||
|
||
Status = ZwCreateFile(&FileHandle, // file handle
|
||
SYNCHRONIZE | FILE_APPEND_DATA,// desired access
|
||
&ObjectAttributes, // object attributes
|
||
&IoStatus, // returned status
|
||
&MaxFileSize, // alloc size
|
||
FILE_ATTRIBUTE_NORMAL, // file attributes
|
||
FILE_SHARE_READ, // share access
|
||
FILE_OPEN_IF, // create disposition
|
||
FILE_SYNCHRONOUS_IO_NONALERT, // create options
|
||
NULL, // eabuffer
|
||
0); // ealength
|
||
|
||
ZwClose(FileHandle);
|
||
|
||
if (NT_SUCCESS(Status))
|
||
return(FileHandle);
|
||
else
|
||
return((HANDLE)-1);
|
||
|
||
}
|
||
|
||
|
||
|
||
///////////////////////////////////////////////////////////////////////////////
|
||
//
|
||
// BOOLEAN WriteLogFile(HANDLE FileHandle, PVOID InputBuffer,
|
||
// ULONG InputBufferLength)
|
||
//
|
||
// Parameters:
|
||
// FileHandle - the handle of the log file, already opened
|
||
// InputBuffer - the data to be written to the log file
|
||
// InputBufferLength - the length of the data
|
||
//
|
||
// Return:
|
||
// TRUE - the write operation was successful
|
||
// FALSE - the write operation failed
|
||
//
|
||
// Notes:
|
||
//
|
||
// This function writes the supplied buffer to the open log file
|
||
//
|
||
///////////////////////////////////////////////////////////////////////////////
|
||
BOOLEAN WriteLogFile(
|
||
HANDLE FileHandle,
|
||
PVOID InputBuffer,
|
||
ULONG InputBufferLength
|
||
)
|
||
{
|
||
|
||
// Open the file for writing
|
||
Status = ZwCreateFile(&FileHandle, // file handle
|
||
SYNCHRONIZE | FILE_APPEND_DATA,// desired access
|
||
&ObjectAttributes, // object attributes
|
||
&IoStatus, // returned status
|
||
&MaxFileSize, // alloc size
|
||
FILE_ATTRIBUTE_NORMAL, // file attributes
|
||
FILE_SHARE_READ, // share access
|
||
FILE_OPEN_IF, // create disposition
|
||
FILE_SYNCHRONOUS_IO_NONALERT, // create options
|
||
NULL, // eabuffer
|
||
0); // ealength
|
||
|
||
// Write to the file
|
||
Status = ZwWriteFile(FileHandle, // handle from ZwCreateFile
|
||
NULL, // NULL for device drivers
|
||
NULL, // NULL for device drivers
|
||
NULL, // NULL for device drivers
|
||
&IoStatus, // returned status
|
||
InputBuffer, // buffer with data to be written
|
||
InputBufferLength, // size in bytes of buffer
|
||
NULL, // write at current file position
|
||
NULL); // NULL for device drivers
|
||
|
||
ZwClose(FileHandle);
|
||
|
||
if (NT_SUCCESS(Status))
|
||
return(TRUE);
|
||
else
|
||
return(FALSE);
|
||
|
||
|
||
}
|
||
|
||
|
||
///////////////////////////////////////////////////////////////////////////////
|
||
//
|
||
// void CloseLogFile(HANDLE FileHandle)
|
||
//
|
||
// Parameters:
|
||
// FileHandle - the handle of the open log file
|
||
//
|
||
// Return:
|
||
//
|
||
// Notes:
|
||
// TRUE - the close operation was successful
|
||
// FALSE - the close operation failed
|
||
//
|
||
// This function closes the already open log file
|
||
//
|
||
///////////////////////////////////////////////////////////////////////////////
|
||
BOOLEAN CloseLogFile(HANDLE FileHandle)
|
||
{
|
||
NTSTATUS Status;
|
||
|
||
|
||
// Close the log file
|
||
Status = ZwClose(FileHandle);
|
||
|
||
if (NT_SUCCESS(Status))
|
||
return(TRUE);
|
||
else
|
||
return(FALSE);
|
||
|
||
}
|
||
|
||
#endif // LOG_FILE
|
||
|