/* * reactos/apps/lpc/dumpinfo.c * * ReactOS Operating System * * Dump a kernel object's attributes by its handle. * * 19990627 (Emanuele Aliberti) * Initial implementation. * 19990704 (EA) * Added code to find the basic information buffer size * for the LPC port object. * 19990710 (EA) * */ #include #include #include #include #define BUF_SIZE 1024 #define MAX_BASIC_INFO_SIZE 512 extern NTSTATUS (WINAPI * QueryObject)( IN HANDLE ObjectHandle, IN CINT ObjectInformationClass, OUT PVOID ObjectInformation, IN ULONG Length, OUT PULONG ResultLength ); extern NTSTATUS (WINAPI * QueryInformationPort)( IN HANDLE PortHandle, IN CINT PortInformationClass, /* guess */ OUT PVOID PortInformation, /* guess */ IN ULONG PortInformationLength, /* guess */ OUT PULONG ReturnLength /* guess */ ); /* static VOID DumpBuffer( char *Name, BYTE *buffer, ULONG size ) { register ULONG i = 0; printf("%s [%d] = ",Name,size); for ( i = 0; i != size; ++i ) { printf("%02X",buffer[i]); } printf("\n"); } */ VOID DumpInfo ( LPCWSTR Name, NTSTATUS Status, LPCWSTR Comment, HANDLE Port ) { BYTE ObjectInformation [BUF_SIZE] = {0}; ULONG ResultLength; wprintf( L"Port \"%s\" %s:\n", Name, Comment ); printf("\tStatus = %08X\n",Status); printf("\tPort = %08X\n\n",Port); /* * Query object information. */ printf("Basic Information:\n"); Status = QueryObject( Port, ObjectBasicInformation, ObjectInformation, sizeof (LPC_PORT_BASIC_INFORMATION), & ResultLength ); if (Status == STATUS_SUCCESS) { PLPC_PORT_BASIC_INFORMATION i; i = (PLPC_PORT_BASIC_INFORMATION) ObjectInformation; printf( "\tUnknown01 = 0x%08X\n", i->Unknown0 ); printf( "\tUnknown02 = 0x%08X\n", i->Unknown1 ); printf( "\tUnknown03 = 0x%08X\n", i->Unknown2 ); printf( "\tUnknown04 = 0x%08X\n", i->Unknown3 ); printf( "\tUnknown05 = 0x%08X\n", i->Unknown4 ); printf( "\tUnknown06 = 0x%08X\n", i->Unknown5 ); printf( "\tUnknown07 = 0x%08X\n", i->Unknown6 ); printf( "\tUnknown08 = 0x%08X\n", i->Unknown7 ); printf( "\tUnknown09 = 0x%08X\n", i->Unknown8 ); printf( "\tUnknown10 = 0x%08X\n", i->Unknown9 ); printf( "\tUnknown11 = 0x%08X\n", i->Unknown10 ); printf( "\tUnknown12 = 0x%08X\n", i->Unknown11 ); printf( "\tUnknown13 = 0x%08X\n", i->Unknown12 ); printf( "\tUnknown14 = 0x%08X\n", i->Unknown13 ); } else { printf("\tStatus = %08X\n",Status); } printf("Type Information:\n"); Status = QueryObject( Port, ObjectTypeInformation, ObjectInformation, sizeof ObjectInformation, & ResultLength ); if (Status == STATUS_SUCCESS) { OBJECT_TYPE_INFORMATION * i; i = (OBJECT_TYPE_INFORMATION *) ObjectInformation; wprintf( L"\tName: \"%s\"\n", (i->Name.Length ? i->Name.Buffer : L"") ); /* FIXME: why this always raise an access violation exception? wprintf( L"\tType: \"%s\"\n", (i->Type.Length ? i->Type.Buffer : L"") ); /**/ printf( "\tTotal Handles: %d\n", i->TotalHandles ); printf( "\tReference Count: %d\n", i->ReferenceCount ); } else { printf("\tStatus = %08X\n",Status); } printf("Name Information:\n"); Status = QueryObject( Port, ObjectNameInformation, ObjectInformation, sizeof ObjectInformation, & ResultLength ); if (Status == STATUS_SUCCESS) { OBJECT_NAME_INFORMATION * i; i = (OBJECT_NAME_INFORMATION *) ObjectInformation; wprintf( L"\tName: \"%s\"\n", (i->Name.Length ? i->Name.Buffer : L"") ); } else { printf("\tStatus = %08X\n",Status); } printf("Data Information:\n"); Status = QueryObject( Port, ObjectDataInformation, ObjectInformation, sizeof ObjectInformation, & ResultLength ); if (Status == STATUS_SUCCESS) { OBJECT_DATA_INFORMATION * i; i = (OBJECT_DATA_INFORMATION *) ObjectInformation; printf( "\tInherit Handle: %s\n", (i->bInheritHandle ? "TRUE" : "FALSE") ); printf( "\tProtect from Close: %s\n", (i->bProtectFromClose ? "TRUE" : "FALSE") ); } else { printf("\tStatus = %08X\n",Status); } //--- printf("Port Information:\n"); /* Status = QueryInformationPort( Port, 1, /* info class * / ObjectInformation, sizeof ObjectInformation, & ResultLength ); if (Status == STATUS_SUCCESS) { DWORD * i = ObjectInformation; int j = 0; while (j < ResultLength / sizeof (DWORD)) { printf("\t%08X\n",i[j]); ++j; } } else { printf("\tStatus = %08X\n",Status); } */ } /* EOF */