Main Page | Class Hierarchy | Class List | File List | Class Members | File Members

triage.c File Reference

#include "iop.h"
#include <nt.h>
#include <ntrtl.h>
#include <windef.h>
#include <stdio.h>
#include <malloc.h>
#include <ntiodump.h>
#include <triage.h>
#include <ntverp.h>

Go to the source code of this file.

Defines

#define NtBuildNumber   (VER_PRODUCTBUILD | 0xF0000000)
#define PAGE_SIZE_I386   0x1000
#define PAGE_SIZE_ALPHA   0x2000
#define PAGE_SIZE_IA64   0x2000
#define IndexByUlong(Pointer, Index)   (&(((ULONG*) (Pointer)) [Index]))
#define IndexByByte(Pointer, Index)   (&(((BYTE*) (Pointer)) [Index]))

Functions

BOOLEAN TriagepVerifyDump (IN LPVOID TriageDumpBlock)
ULONG TriagepGetPageSize (ULONG Architecture)
PTRIAGE_DUMP_HEADER TriagepGetTriagePointer (IN PVOID TriageDumpBlock)
NTSTATUS TriageGetVersion (IN LPVOID TriageDumpBlock, OUT ULONG *MajorVersion, OUT ULONG *MinorVersion, OUT ULONG *ServicePackBuild)
NTSTATUS TriageGetDriverCount (IN LPVOID TriageDumpBlock, OUT ULONG *DriverCount)
LOGICAL TriageActUpon (IN PVOID TriageDumpBlock)
NTSTATUS TriageGetBugcheckData (IN LPVOID TriageDumpBlock, OUT ULONG *BugCheckCode, OUT UINT_PTR *BugCheckParam1, OUT UINT_PTR *BugCheckParam2, OUT UINT_PTR *BugCheckParam3, OUT UINT_PTR *BugCheckParam4)
PLDR_DATA_TABLE_ENTRY TriageGetLoaderEntry (IN PVOID TriageDumpBlock, IN ULONG ModuleIndex)
PVOID TriageGetMmInformation (IN PVOID TriageDumpBlock)

Variables

ULONG TriageImagePageSize = -1


Define Documentation

#define IndexByByte Pointer,
Index   )     (&(((BYTE*) (Pointer)) [Index]))
 

Definition at line 144 of file triage.c.

#define IndexByUlong Pointer,
Index   )     (&(((ULONG*) (Pointer)) [Index]))
 

Definition at line 116 of file triage.c.

Referenced by TriagepVerifyDump().

#define NtBuildNumber   (VER_PRODUCTBUILD | 0xF0000000)
 

Definition at line 42 of file triage.c.

Referenced by CmpSetVersionData(), IopInitializeDCB(), KdpGetVersion(), KeDumpMachineState(), MmCreatePeb(), PsGetVersion(), and ViPrintString().

#define PAGE_SIZE_ALPHA   0x2000
 

Definition at line 53 of file triage.c.

Referenced by TriagepGetPageSize().

#define PAGE_SIZE_I386   0x1000
 

Definition at line 52 of file triage.c.

Referenced by TriagepGetPageSize().

#define PAGE_SIZE_IA64   0x2000
 

Definition at line 54 of file triage.c.

Referenced by TriagepGetPageSize().


Function Documentation

LOGICAL TriageActUpon IN PVOID  TriageDumpBlock  ) 
 

Definition at line 367 of file triage.c.

References DCB_TRIAGE_DUMP_ACT_UPON_ENABLED, FALSE, TriagepGetTriagePointer(), TriagepVerifyDump(), and TRUE.

00370 { 00371 PTRIAGE_DUMP_HEADER TriageDump; 00372 00373 if (!TriagepVerifyDump (TriageDumpBlock)) { 00374 return FALSE; 00375 } 00376 00377 TriageDump = TriagepGetTriagePointer (TriageDumpBlock); 00378 00379 if (!TriageDump) { 00380 return FALSE; 00381 } 00382 00383 if ((TriageDump->TriageOptions & DCB_TRIAGE_DUMP_ACT_UPON_ENABLED) == 0) { 00384 return FALSE; 00385 } 00386 00387 return TRUE; 00388 }

NTSTATUS TriageGetBugcheckData IN LPVOID  TriageDumpBlock,
OUT ULONG *  BugCheckCode,
OUT UINT_PTR *  BugCheckParam1,
OUT UINT_PTR *  BugCheckParam2,
OUT UINT_PTR *  BugCheckParam3,
OUT UINT_PTR *  BugCheckParam4
 

Definition at line 392 of file triage.c.

References TriagepVerifyDump().

00400 { 00401 PDUMP_HEADER DumpHeader; 00402 00403 if (!TriagepVerifyDump (TriageDumpBlock)) { 00404 return STATUS_INVALID_PARAMETER; 00405 } 00406 00407 DumpHeader = (PDUMP_HEADER) TriageDumpBlock; 00408 00409 *BugCheckCode = DumpHeader->BugCheckCode; 00410 *BugCheckParam1 = DumpHeader->BugCheckParameter1; 00411 *BugCheckParam2 = DumpHeader->BugCheckParameter2; 00412 *BugCheckParam3 = DumpHeader->BugCheckParameter3; 00413 *BugCheckParam4 = DumpHeader->BugCheckParameter4; 00414 00415 return STATUS_SUCCESS; 00416 }

NTSTATUS TriageGetDriverCount IN LPVOID  TriageDumpBlock,
OUT ULONG *  DriverCount
 

Definition at line 276 of file triage.c.

References TriagepGetTriagePointer(), and TriagepVerifyDump().

00280 { 00281 PTRIAGE_DUMP_HEADER TriageDump; 00282 00283 if (!TriagepVerifyDump (TriageDumpBlock)) { 00284 return STATUS_INVALID_PARAMETER; 00285 } 00286 00287 TriageDump = TriagepGetTriagePointer (TriageDumpBlock); 00288 00289 if (!TriageDump) { 00290 return STATUS_INVALID_PARAMETER; 00291 } 00292 00293 *DriverCount = TriageDump->DriverCount; 00294 00295 return STATUS_SUCCESS; 00296 }

PLDR_DATA_TABLE_ENTRY TriageGetLoaderEntry IN PVOID  TriageDumpBlock,
IN ULONG  ModuleIndex
 

Definition at line 421 of file triage.c.

References IndexByByte, NULL, TriagepGetTriagePointer(), TriagepVerifyDump(), and USHORT.

00428 : 00429 00430 This function retrieves a loaded module list entry. 00431 00432 Arguments: 00433 00434 TriageDumpBlock - Supplies the triage dump to reference. 00435 00436 ModuleIndex - Supplies the driver index number to locate. 00437 00438 Return Value: 00439 00440 A pointer to a loader data table entry if one is available, NULL if not. 00441 00442 Environment: 00443 00444 Kernel mode, APC_LEVEL or below. Phase 0 only. 00445 00446 N.B. This function is for use by memory management ONLY. 00447 00448 --*/ 00449 00450 { 00451 ULONG i; 00452 PDUMP_STRING DriverName; 00453 PDUMP_DRIVER_ENTRY DriverList; 00454 PTRIAGE_DUMP_HEADER TriageDump; 00455 PLDR_DATA_TABLE_ENTRY DataTableEntry; 00456 00457 if (!TriagepVerifyDump (TriageDumpBlock)) { 00458 return NULL; 00459 } 00460 00461 TriageDump = TriagepGetTriagePointer (TriageDumpBlock); 00462 00463 if (ModuleIndex >= TriageDump->DriverCount) { 00464 return NULL; 00465 } 00466 00467 DriverList = (PDUMP_DRIVER_ENTRY) 00468 IndexByByte (TriageDumpBlock, TriageDump->DriverListOffset); 00469 00470 00471 DataTableEntry = &DriverList [ ModuleIndex ].LdrEntry; 00472 00473 // 00474 // Repoint the module driver name into the triage buffer. 00475 // 00476 00477 DriverName = (PDUMP_STRING) 00478 IndexByByte (TriageDumpBlock, 00479 DriverList [ ModuleIndex ].DriverNameOffset); 00480 00481 DataTableEntry->BaseDllName.Length = (USHORT) (DriverName->Length * sizeof (WCHAR)); 00482 DataTableEntry->BaseDllName.MaximumLength = DataTableEntry->BaseDllName.Length; 00483 DataTableEntry->BaseDllName.Buffer = DriverName->Buffer; 00484 00485 return DataTableEntry; 00486 }

PVOID TriageGetMmInformation IN PVOID  TriageDumpBlock  ) 
 

Definition at line 490 of file triage.c.

References IndexByByte, NULL, TriagepGetTriagePointer(), and TriagepVerifyDump().

00496 : 00497 00498 This function retrieves a loaded module list entry. 00499 00500 Arguments: 00501 00502 TriageDumpBlock - Supplies the triage dump to reference. 00503 00504 Return Value: 00505 00506 A pointer to an opaque Mm information structure. 00507 00508 Environment: 00509 00510 Kernel mode, APC_LEVEL or below. Phase 0 only. 00511 00512 N.B. This function is for use by memory management ONLY. 00513 00514 --*/ 00515 00516 { 00517 PTRIAGE_DUMP_HEADER TriageDump; 00518 00519 if (!TriagepVerifyDump (TriageDumpBlock)) { 00520 return NULL; 00521 } 00522 00523 TriageDump = TriagepGetTriagePointer (TriageDumpBlock); 00524 00525 if (!TriageDump) { 00526 return NULL; 00527 } 00528 00529 return (PVOID)IndexByByte (TriageDumpBlock, TriageDump->MmOffset); 00530 } }

NTSTATUS TriageGetVersion IN LPVOID  TriageDumpBlock,
OUT ULONG *  MajorVersion,
OUT ULONG *  MinorVersion,
OUT ULONG *  ServicePackBuild
 

Definition at line 236 of file triage.c.

References TriagepGetTriagePointer(), and TriagepVerifyDump().

00242 { 00243 PTRIAGE_DUMP_HEADER TriageDump; 00244 PDUMP_HEADER DumpHeader; 00245 00246 if (!TriagepVerifyDump (TriageDumpBlock)) { 00247 return STATUS_INVALID_PARAMETER; 00248 } 00249 00250 TriageDump = TriagepGetTriagePointer (TriageDumpBlock); 00251 00252 if (!TriageDump) { 00253 return STATUS_INVALID_PARAMETER; 00254 } 00255 00256 DumpHeader = (PDUMP_HEADER) TriageDumpBlock; 00257 00258 if (MajorVersion) { 00259 *MajorVersion = DumpHeader->MajorVersion; 00260 } 00261 00262 if (MinorVersion) { 00263 *MinorVersion = DumpHeader->MinorVersion; 00264 } 00265 00266 if (ServicePackBuild) { 00267 *ServicePackBuild = TriageDump->ServicePackBuild; 00268 } 00269 00270 return STATUS_SUCCESS; 00271 }

ULONG TriagepGetPageSize ULONG  Architecture  ) 
 

Definition at line 148 of file triage.c.

References PAGE_SIZE_ALPHA, PAGE_SIZE_I386, and PAGE_SIZE_IA64.

Referenced by TriagepVerifyDump().

00151 { 00152 switch (Architecture) { 00153 00154 case IMAGE_FILE_MACHINE_I386: 00155 return PAGE_SIZE_I386; 00156 00157 case IMAGE_FILE_MACHINE_ALPHA: 00158 return PAGE_SIZE_ALPHA; 00159 00160 case IMAGE_FILE_MACHINE_IA64: 00161 return PAGE_SIZE_IA64; 00162 00163 default: 00164 return -1; 00165 } 00166 }

PTRIAGE_DUMP_HEADER TriagepGetTriagePointer IN PVOID  TriageDumpBlock  ) 
 

Definition at line 223 of file triage.c.

References ASSERT, IndexByByte, TriageImagePageSize, and TriagepVerifyDump().

Referenced by TriageActUpon(), TriageGetDriverCount(), TriageGetLoaderEntry(), TriageGetMmInformation(), and TriageGetVersion().

00226 { 00227 ASSERT (TriageImagePageSize != -1); 00228 ASSERT (TriagepVerifyDump (TriageDumpBlock)); 00229 00230 return (PTRIAGE_DUMP_HEADER) IndexByByte (TriageDumpBlock, TriageImagePageSize); 00231 }

BOOLEAN TriagepVerifyDump IN LPVOID  TriageDumpBlock  ) 
 

Definition at line 171 of file triage.c.

References DWORD, EXCEPTION_EXECUTE_HANDLER, FALSE, IndexByByte, IndexByUlong, NULL, TriageImagePageSize, TriagepGetPageSize(), and TRUE.

Referenced by TriageActUpon(), TriageGetBugcheckData(), TriageGetDriverCount(), TriageGetLoaderEntry(), TriageGetMmInformation(), TriageGetVersion(), and TriagepGetTriagePointer().

00174 { 00175 BOOLEAN Succ = FALSE; 00176 PDUMP_HEADER DumpHeader = NULL; 00177 PTRIAGE_DUMP_HEADER TriageHeader = NULL; 00178 00179 if (!TriageDumpBlock) { 00180 00181 return FALSE; 00182 } 00183 00184 DumpHeader = (PDUMP_HEADER) TriageDumpBlock; 00185 00186 try { 00187 00188 if (DumpHeader->ValidDump != 'PMUD' || 00189 DumpHeader->Signature != 'EGAP' || 00190 TriagepGetPageSize (DumpHeader->MachineImageType) == -1) { 00191 00192 Succ = FALSE; 00193 leave; 00194 } 00195 00196 TriageImagePageSize = TriagepGetPageSize (DumpHeader->MachineImageType); 00197 00198 TriageHeader = (PTRIAGE_DUMP_HEADER) 00199 IndexByByte ( TriageDumpBlock, TriageImagePageSize ); 00200 00201 if ( *(ULONG*)IndexByUlong (DumpHeader, DH_DUMP_TYPE) != DUMP_TYPE_TRIAGE || 00202 *(ULONG*)IndexByByte (DumpHeader, TriageHeader->SizeOfDump - sizeof (DWORD)) != TRIAGE_DUMP_VALID ) { 00203 00204 Succ = FALSE; 00205 leave; 00206 } 00207 00208 // else 00209 00210 Succ = TRUE; 00211 } 00212 00213 except (EXCEPTION_EXECUTE_HANDLER) { 00214 00215 Succ = FALSE; 00216 } 00217 00218 return Succ; 00219 }


Variable Documentation

ULONG TriageImagePageSize = -1
 

Definition at line 57 of file triage.c.

Referenced by TriagepGetTriagePointer(), and TriagepVerifyDump().


Generated on Sat May 15 19:45:49 2004 for test by doxygen 1.3.7