ReactOS 0.4.16-dev-338-g34e76ad
intrin_i.h
Go to the documentation of this file.
1#ifndef _INTRIN_INTERNAL_
2#define _INTRIN_INTERNAL_
3
7{
8 __writecr8(Irql);
9}
10
13KiGetGdtEntry(PVOID pGdt, USHORT Selector)
14{
15 return (PKGDTENTRY64)((ULONG64)pGdt + (Selector & ~RPL_MASK));
16}
17
21{
22 return (PVOID)((ULONG64)Entry->BaseLow |
23 (ULONG64)Entry->Bytes.BaseMiddle << 16 |
24 (ULONG64)Entry->Bytes.BaseHigh << 24 |
25 (ULONG64)Entry->BaseUpper << 32);
26}
27
29VOID
31{
32 Entry->BaseLow = Base & 0xffff;
33 Entry->Bits.BaseMiddle = (Base >> 16) & 0xff;
34 Entry->Bits.BaseHigh = (Base >> 24) & 0xff;
35 Entry->BaseUpper = Base >> 32;
36}
37
39VOID
41{
42 Entry->LimitLow = Limit & 0xffff;
43 Entry->Bits.LimitHigh = Limit >> 16;
44}
45
47VOID
49{
52 Entry->Bits.Type = Type;
53 Entry->Bits.Dpl = Dpl;
54 Entry->Bits.Present = 1;
55 Entry->Bits.System = 0;
56 Entry->Bits.LongMode = 0;
57 Entry->Bits.DefaultBig = 0;
58 Entry->Bits.Granularity = 0;
59 Entry->MustBeZero = 0;
60}
61
62#if defined(__GNUC__)
63
64static __inline__ __attribute__((always_inline)) void __lgdt(void *Source)
65{
66 __asm__ __volatile__("lgdt %0" : : "m"(*(short*)Source));
67}
68
69static __inline__ __attribute__((always_inline)) void __sgdt(void *Destination)
70{
71 __asm__ __volatile__("sgdt %0" : : "m"(*(short*)Destination) : "memory");
72}
73
74static __inline__ __attribute__((always_inline)) void __lldt(unsigned short Value)
75{
76 __asm__ __volatile__("lldt %0" : : "rm"(Value));
77}
78
79static __inline__ __attribute__((always_inline)) void __sldt(void *Destination)
80{
81 __asm__ __volatile__("sldt %0" : : "m"(*(short*)Destination) : "memory");
82}
83
84static __inline__ __attribute__((always_inline)) void __ltr(unsigned short Source)
85{
86 __asm__ __volatile__("ltr %0" : : "rm"(Source));
87}
88
89static __inline__ __attribute__((always_inline)) void __str(unsigned short *Destination)
90{
91 __asm__ __volatile__("str %0" : : "m"(*Destination) : "memory");
92}
93
94static __inline__ __attribute__((always_inline)) void __swapgs(void)
95{
96 __asm__ __volatile__("swapgs" : : : "memory");
97}
98
99#elif defined(_MSC_VER)
100
101void __lgdt(void *Source);
102
103void __sgdt(void *Destination);
104
105void __lldt(unsigned short Value);
106
107void __sldt(void *Destination);
108
109void __ltr(unsigned short Source);
110
111void __str(unsigned short *Destination);
112
113void __swapgs(void);
114
115#else
116#error Unknown compiler for inline assembler
117#endif
118
119#endif
120
121/* EOF */
Type
Definition: Type.h:7
FORCEINLINE VOID KeSetCurrentIrql(KIRQL Irql)
Definition: intrin_i.h:6
FORCEINLINE VOID KiSetGdtDescriptorLimit(PKGDTENTRY Entry, ULONG Limit)
Definition: intrin_i.h:40
FORCEINLINE PKGDTENTRY64 KiGetGdtEntry(PVOID pGdt, USHORT Selector)
Definition: intrin_i.h:13
FORCEINLINE VOID KiSetGdtDescriptorBase(PKGDTENTRY Entry, ULONG64 Base)
Definition: intrin_i.h:30
FORCEINLINE PVOID KiGetGdtDescriptorBase(PKGDTENTRY Entry)
Definition: intrin_i.h:20
FORCEINLINE VOID KiInitGdtEntry(PKGDTENTRY64 Entry, ULONG64 Base, ULONG Size, UCHAR Type, UCHAR Dpl)
Definition: intrin_i.h:48
_Out_ PKIRQL Irql
Definition: csq.h:179
#define __attribute__(x)
Definition: wpp_private.h:207
UCHAR KIRQL
Definition: env_spec_w32.h:591
unsigned __int64 ULONG64
Definition: imports.h:198
_In_ UINT _In_ UINT _In_ PNDIS_PACKET Source
Definition: ndis.h:3169
#define RPL_MASK
Definition: ketypes.h:119
_In_ PUNICODE_STRING _Inout_ PUNICODE_STRING Destination
Definition: rtlfuncs.h:3016
_In_opt_ ULONG Base
Definition: rtlfuncs.h:2451
unsigned short USHORT
Definition: pedump.c:61
__asm__(".p2align 4, 0x90\n" ".seh_proc __seh2_global_filter_func\n" "__seh2_global_filter_func:\n" "\tsub %rbp, %rax\n" "\tpush %rbp\n" "\t.seh_pushreg %rbp\n" "\tsub $32, %rsp\n" "\t.seh_stackalloc 32\n" "\t.seh_endprologue\n" "\tsub %rax, %rdx\n" "\tmov %rdx, %rbp\n" "\tjmp *%r8\n" "__seh2_global_filter_func_exit:\n" "\t.p2align 4\n" "\tadd $32, %rsp\n" "\tpop %rbp\n" "\tret\n" "\t.seh_endproc")
base of all file and directory entries
Definition: entries.h:83
uint32_t ULONG
Definition: typedefs.h:59
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
Definition: wdfdevice.h:4533
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
Definition: wdfregistry.h:413
#define FORCEINLINE
Definition: wdftypes.h:67
_In_ LONG _In_ LONG Limit
Definition: kefuncs.h:304
unsigned char UCHAR
Definition: xmlstorage.h:181