00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 typedef struct _KDEVICE_BLOCK {
00026     USHORT Length;
00027     UCHAR 
Revision;
00028     UCHAR 
SecondDeviceId;
00029     USHORT LogicalId;
00030     USHORT DeviceId;
00031     USHORT NumberExclusivePortPairs;
00032     USHORT NumberCommonPortPairs;
00033 } 
KDEVICE_BLOCK, *
PKDEVICE_BLOCK; 
00034 
00035 
00036 typedef struct _KABIOS_POINTER {
00037     USHORT Offset;
00038     USHORT Selector;
00039 } 
KABIOS_POINTER, *
PKABIOS_POINTER;
00040 
00041 
#pragma pack(1)
00042 
00043 
00044 
00045 
00046 
00047 typedef struct _KFUNCTION_TRANSFER_TABLE {
00048     KABIOS_POINTER CommonRoutine[3];
00049     USHORT FunctionCount;
00050     USHORT Reserved;
00051     KABIOS_POINTER SpecificRoutine;
00052 } 
KFUNCTION_TRANSFER_TABLE, *
PKFUNCTION_TRANSFER_TABLE;
00053 
00054 
00055 
00056 
00057 
00058 
00059 typedef struct _KDB_FTT_SECTION {
00060     KABIOS_POINTER DeviceBlock;
00061     KABIOS_POINTER FunctionTransferTable;
00062 } 
KDB_FTT_SECTION, *
PKDB_FTT_SECTION;
00063 
00064 typedef struct _KCOMMON_DATA_AREA {
00065     USHORT DataPointer0Offset;
00066     USHORT NumberLids;
00067     ULONG 
Reserved;
00068     PKDB_FTT_SECTION DbFttPointer;
00069 } 
KCOMMON_DATA_AREA, *
PKCOMMON_DATA_AREA;
00070 
00071 
#pragma pack()
00072 
00073 
00074 
00075 
00076 
00077 typedef struct _KFREE_GDT_ENTRY {
00078     struct _KFREE_GDT_ENTRY *
Flink;
00079     ULONG 
BaseMid : 8;
00080     ULONG 
Type : 5;
00081     ULONG 
Dpl : 2;
00082     ULONG 
Present : 1;
00083     ULONG 
LimitHi : 4;
00084     ULONG 
Sys : 1;
00085     ULONG 
Reserved_0 : 1;
00086     ULONG 
Default_Big : 1;
00087     ULONG 
Granularity : 1;
00088     ULONG 
BaseHi : 8;
00089 } 
KFREE_GDT_ENTRY, *
PKFREE_GDT_ENTRY;
00090 
00091 
00092 
00093 
00094 
00095 typedef struct _KLID_TABLE_ENTRY {
00096     ULONG 
Owner;
00097     ULONG 
OwnerCount;
00098 } 
KLID_TABLE_ENTRY, *
PKLID_TABLE_ENTRY;
00099 
00100 #define LID_NO_SPECIFIC_OWNER  0xffffffff
00101 #define NUMBER_LID_TABLE_ENTRIES 1024
00102 
00103 
00104 
00105 
00106 
00107 #define HIGHBYTE(l) ((UCHAR)(((USHORT)(l)>>8) & 0xff))
00108 
00109 
00110 
00111 
00112 
00113 #define LOWBYTE(l) ((UCHAR)(l))
00114 
00115 
00116 
00117 
00118 
00119 
00120 #define KGDT_STACK16 0xf8
00121 #define KGDT_CODE16 0xf0
00122 #define KGDT_CDA16  0xe8         
00123 #define KGDT_GDT_ALIAS 0x70
00124 
00125 
00126 
00127 
00128 
00129 #define RESERVED_GDT_ENTRIES  28
00130 
00131 
00132 
00133 
00134 
00135 extern PKFREE_GDT_ENTRY KiAbiosGdtStart;
00136 extern PKFREE_GDT_ENTRY KiAbiosGdtEnd;
00137 extern PUCHAR 
KiEndOfCode16;
00138 extern ULONG 
KiStack16GdtEntry;
00139 
00140 
extern 
00141 
VOID
00142 
KiI386CallAbios(
00143     IN 
KABIOS_POINTER AbiosFunction,
00144     IN 
KABIOS_POINTER DeviceBlockPointer,
00145     IN 
KABIOS_POINTER FunctionTransferTable,
00146     IN 
KABIOS_POINTER RequestBlock
00147     );
00148 
00149 
VOID
00150 
KiInitializeAbiosGdtEntry (
00151     OUT PKGDTENTRY GdtEntry,
00152     IN ULONG Base,
00153     IN ULONG Limit,
00154     IN USHORT Type
00155     );
00156 
00157 
extern
00158 ULONG
00159 
KiAbiosGetGdt (
00160     VOID
00161     );
00162 
00163