📄 fieldoff.c
字号:
#include "CdProcs.h"
#include <stdio.h>
#define doit(a,b) { printf("%s %04lx %4lx %s\n", #a, FIELD_OFFSET(a,b), sizeof(d.b), #b); }
VOID
__cdecl
main (argc, argv)
int argc;
char *argv[];
{
printf("<Record> <offset> <size> <field>\n\n");
{
CD_MCB d;
doit( CD_MCB, MaximumEntryCount );
doit( CD_MCB, CurrentEntryCount );
doit( CD_MCB, McbArray );
}
printf("\n");
{
CD_MCB_ENTRY d;
doit( CD_MCB_ENTRY, DiskOffset );
doit( CD_MCB_ENTRY, ByteCount );
doit( CD_MCB_ENTRY, FileOffset );
doit( CD_MCB_ENTRY, DataBlockByteCount );
doit( CD_MCB_ENTRY, TotalBlockByteCount );
}
printf("\n");
{
CD_NAME d;
doit( CD_NAME, FileName );
doit( CD_NAME, VersionString );
}
printf("\n");
{
NAME_LINK d;
doit( NAME_LINK, Links );
doit( NAME_LINK, FileName );
}
printf("\n");
{
PREFIX_ENTRY d;
doit( PREFIX_ENTRY, Fcb );
doit( PREFIX_ENTRY, PrefixFlags );
doit( PREFIX_ENTRY, ExactCaseName );
doit( PREFIX_ENTRY, IgnoreCaseName );
doit( PREFIX_ENTRY, FileNameBuffer );
}
printf("\n");
{
CD_DATA d;
doit( CD_DATA, NodeTypeCode );
doit( CD_DATA, NodeByteSize );
doit( CD_DATA, DriverObject );
doit( CD_DATA, VcbQueue );
doit( CD_DATA, IrpContextDepth );
doit( CD_DATA, IrpContextMaxDepth );
doit( CD_DATA, IrpContextList );
doit( CD_DATA, FileSystemDeviceObject );
doit( CD_DATA, AsyncCloseQueue );
doit( CD_DATA, AsyncCloseCount );
doit( CD_DATA, FspCloseActive );
doit( CD_DATA, ReduceDelayedClose );
doit( CD_DATA, PadUshort );
doit( CD_DATA, DelayedCloseQueue );
doit( CD_DATA, DelayedCloseCount );
doit( CD_DATA, MinDelayedCloseCount );
doit( CD_DATA, MaxDelayedCloseCount );
doit( CD_DATA, CdDataLockThread );
doit( CD_DATA, CdDataMutex );
doit( CD_DATA, DataResource );
doit( CD_DATA, CacheManagerCallbacks );
doit( CD_DATA, CacheManagerVolumeCallbacks );
doit( CD_DATA, CloseItem );
}
printf("\n");
{
VCB d;
doit( VCB, NodeTypeCode );
doit( VCB, NodeByteSize );
doit( VCB, Vpb );
doit( VCB, TargetDeviceObject );
doit( VCB, VolumeLockFileObject );
doit( VCB, VcbLinks );
doit( VCB, VcbState );
doit( VCB, VcbCondition );
doit( VCB, VcbCleanup );
doit( VCB, VcbReference );
doit( VCB, VcbUserReference );
doit( VCB, VolumeDasdFcb );
doit( VCB, RootIndexFcb );
doit( VCB, PathTableFcb );
doit( VCB, BaseSector );
doit( VCB, VdSectorOffset );
doit( VCB, PrimaryVdSectorOffset );
doit( VCB, XASector );
doit( VCB, XADiskOffset );
doit( VCB, VcbResource );
doit( VCB, FileResource );
doit( VCB, VcbMutex );
doit( VCB, VcbLockThread );
doit( VCB, NotifySync );
doit( VCB, DirNotifyList );
doit( VCB, BlockSize );
doit( VCB, BlockToSectorShift );
doit( VCB, BlockToByteShift );
doit( VCB, BlocksPerSector );
doit( VCB, BlockMask );
doit( VCB, BlockInverseMask );
doit( VCB, FcbTable );
doit( VCB, CdromToc );
doit( VCB, TocLength );
doit( VCB, TrackCount );
doit( VCB, DiskFlags );
doit( VCB, BlockFactor );
}
printf("\n");
{
VOLUME_DEVICE_OBJECT d;
doit( VOLUME_DEVICE_OBJECT, DeviceObject );
doit( VOLUME_DEVICE_OBJECT, PostedRequestCount );
doit( VOLUME_DEVICE_OBJECT, OverflowQueueCount );
doit( VOLUME_DEVICE_OBJECT, OverflowQueue );
doit( VOLUME_DEVICE_OBJECT, OverflowQueueSpinLock );
doit( VOLUME_DEVICE_OBJECT, Vcb );
}
printf("\n");
{
FCB_DATA d;
doit( FCB_DATA, Oplock );
doit( FCB_DATA, FileLock );
}
printf("\n");
{
FCB_INDEX d;
doit( FCB_INDEX, FileObject );
doit( FCB_INDEX, StreamOffset );
doit( FCB_INDEX, FcbQueue );
doit( FCB_INDEX, Ordinal );
doit( FCB_INDEX, ChildPathTableOffset );
doit( FCB_INDEX, ChildOrdinal );
doit( FCB_INDEX, ExactCaseRoot );
doit( FCB_INDEX, IgnoreCaseRoot );
}
printf("\n");
{
FCB_NONPAGED d;
doit( FCB_NONPAGED, NodeTypeCode );
doit( FCB_NONPAGED, NodeByteSize );
doit( FCB_NONPAGED, SegmentObject );
doit( FCB_NONPAGED, FcbResource );
doit( FCB_NONPAGED, FcbMutex );
}
printf("\n");
{
FCB d;
doit( FCB, Header );
doit( FCB, Vcb );
doit( FCB, ParentFcb );
doit( FCB, FcbLinks );
doit( FCB, FileId );
doit( FCB, FcbCleanup );
doit( FCB, FcbReference );
doit( FCB, FcbUserReference );
doit( FCB, FcbState );
doit( FCB, FileAttributes );
doit( FCB, XAAttributes );
doit( FCB, XAFileNumber );
doit( FCB, FcbLockThread );
doit( FCB, FcbLockCount );
doit( FCB, FcbNonpaged );
doit( FCB, ShareAccess );
doit( FCB, McbEntry );
doit( FCB, Mcb );
doit( FCB, ShortNamePrefix );
doit( FCB, FileNamePrefix );
doit( FCB, CreationTime );
doit( FCB, FcbType );
}
printf("\n");
{
CCB d;
doit( CCB, NodeTypeCode );
doit( CCB, NodeByteSize );
doit( CCB, Flags );
doit( CCB, Fcb );
doit( CCB, CurrentDirentOffset );
doit( CCB, SearchExpression );
}
printf("\n");
{
IRP_CONTEXT d;
doit( IRP_CONTEXT, NodeTypeCode );
doit( IRP_CONTEXT, NodeByteSize );
doit( IRP_CONTEXT, Irp );
doit( IRP_CONTEXT, Vcb );
doit( IRP_CONTEXT, ExceptionStatus );
doit( IRP_CONTEXT, Flags );
doit( IRP_CONTEXT, RealDevice );
doit( IRP_CONTEXT, IoContext );
doit( IRP_CONTEXT, TeardownFcb );
doit( IRP_CONTEXT, TopLevel );
doit( IRP_CONTEXT, MajorFunction );
doit( IRP_CONTEXT, MinorFunction );
doit( IRP_CONTEXT, ThreadContext );
doit( IRP_CONTEXT, WorkQueueItem );
}
printf("\n");
{
IRP_CONTEXT_LITE d;
doit( IRP_CONTEXT_LITE, NodeTypeCode );
doit( IRP_CONTEXT_LITE, NodeByteSize );
doit( IRP_CONTEXT_LITE, Fcb );
doit( IRP_CONTEXT_LITE, DelayedCloseLinks );
doit( IRP_CONTEXT_LITE, UserReference );
doit( IRP_CONTEXT_LITE, RealDevice );
}
printf("\n");
{
CD_IO_CONTEXT d;
doit( CD_IO_CONTEXT, IrpCount );
doit( CD_IO_CONTEXT, MasterIrp );
doit( CD_IO_CONTEXT, Status );
doit( CD_IO_CONTEXT, AllocatedContext );
doit( CD_IO_CONTEXT, Resource );
doit( CD_IO_CONTEXT, ResourceThreadId );
doit( CD_IO_CONTEXT, SyncEvent );
}
printf("\n");
{
THREAD_CONTEXT d;
doit( THREAD_CONTEXT, Cdfs );
doit( THREAD_CONTEXT, SavedTopLevelIrp );
doit( THREAD_CONTEXT, TopLevelIrpContext );
}
printf("\n");
{
PATH_ENUM_CONTEXT d;
doit( PATH_ENUM_CONTEXT, Data );
doit( PATH_ENUM_CONTEXT, BaseOffset );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -