[GDI32] Update Gdi Driver Header.
[reactos.git] / win32ss / gdi / ntgdi / misc.h
1 #pragma once
2
3 typedef struct INTENG_ENTER_LEAVE_TAG
4 {
5 /* Contents is private to EngEnter/EngLeave */
6 SURFOBJ *DestObj;
7 SURFOBJ *OutputObj;
8 HBITMAP OutputBitmap;
9 CLIPOBJ *TrivialClipObj;
10 RECTL DestRect;
11 BOOL ReadOnly;
12 } INTENG_ENTER_LEAVE, *PINTENG_ENTER_LEAVE;
13
14 extern BOOL APIENTRY IntEngEnter(PINTENG_ENTER_LEAVE EnterLeave,
15 SURFOBJ *DestObj,
16 RECTL *DestRect,
17 BOOL ReadOnly,
18 POINTL *Translate,
19 SURFOBJ **OutputObj);
20
21 extern BOOL APIENTRY IntEngLeave(PINTENG_ENTER_LEAVE EnterLeave);
22
23 extern HGDIOBJ StockObjects[];
24 extern USHORT gusLanguageID;
25
26 USHORT FASTCALL UserGetLanguageID(VOID);
27 PVOID APIENTRY HackSecureVirtualMemory(IN PVOID,IN SIZE_T,IN ULONG,OUT PVOID *);
28 VOID APIENTRY HackUnsecureVirtualMemory(IN PVOID);
29
30 NTSTATUS
31 NTAPI
32 RegOpenKey(
33 LPCWSTR pwszKeyName,
34 PHKEY phkey);
35
36 NTSTATUS
37 NTAPI
38 RegQueryValue(
39 IN HKEY hkey,
40 IN PCWSTR pwszValueName,
41 IN ULONG ulType,
42 OUT PVOID pvData,
43 IN OUT PULONG pcbValue);
44
45 VOID
46 NTAPI
47 RegWriteSZ(HKEY hkey, PWSTR pwszValue, PWSTR pwszData);
48
49 VOID
50 NTAPI
51 RegWriteDWORD(HKEY hkey, PWSTR pwszValue, DWORD dwData);
52
53 BOOL
54 NTAPI
55 RegReadDWORD(HKEY hkey, PWSTR pwszValue, PDWORD pdwData);
56
57 VOID FASTCALL
58 SetLastNtError(
59 NTSTATUS Status);
60
61 typedef struct _GDI_POOL *PGDI_POOL;
62
63 PGDI_POOL
64 NTAPI
65 GdiPoolCreate(
66 ULONG cjAllocSize,
67 ULONG ulTag);
68
69 VOID
70 NTAPI
71 GdiPoolDestroy(PGDI_POOL pPool);
72
73 PVOID
74 NTAPI
75 GdiPoolAllocate(
76 PGDI_POOL pPool);
77
78 VOID
79 NTAPI
80 GdiPoolFree(
81 PGDI_POOL pPool,
82 PVOID pvAlloc);
83
84 FORCEINLINE
85 VOID
86 ExAcquirePushLockExclusive(PEX_PUSH_LOCK PushLock)
87 {
88 /* Try acquiring the lock */
89 if (InterlockedBitTestAndSet((PLONG)PushLock, EX_PUSH_LOCK_LOCK_V))
90 {
91 /* Someone changed it, use the slow path */
92 ExfAcquirePushLockExclusive(PushLock);
93 }
94 }
95
96 FORCEINLINE
97 BOOLEAN
98 ExTryAcquirePushLockExclusive(PEX_PUSH_LOCK PushLock)
99 {
100 /* Try acquiring the lock */
101 return !InterlockedBitTestAndSet((PLONG)PushLock, EX_PUSH_LOCK_LOCK_V);
102 }
103
104 FORCEINLINE
105 VOID
106 ExReleasePushLockExclusive(PEX_PUSH_LOCK PushLock)
107 {
108 EX_PUSH_LOCK OldValue;
109
110 /* Unlock the pushlock */
111 OldValue.Value = InterlockedExchangeAddSizeT((PSIZE_T)PushLock,
112 -(SSIZE_T)EX_PUSH_LOCK_LOCK);
113 /* Check if anyone is waiting on it and it's not already waking */
114 if ((OldValue.Waiting) && !(OldValue.Waking))
115 {
116 /* Wake it up */
117 ExfTryToWakePushLock(PushLock);
118 }
119 }
120
121 FORCEINLINE
122 VOID
123 _ExInitializePushLock(PEX_PUSH_LOCK Lock)
124 {
125 *(PULONG_PTR)Lock = 0;
126 }
127 #define ExInitializePushLock _ExInitializePushLock
128
129 NTSTATUS FASTCALL
130 IntSafeCopyUnicodeString(PUNICODE_STRING Dest,
131 PUNICODE_STRING Source);
132
133 NTSTATUS FASTCALL
134 IntSafeCopyUnicodeStringTerminateNULL(PUNICODE_STRING Dest,
135 PUNICODE_STRING Source);
136
137 HBITMAP NTAPI UserLoadImage(PCWSTR);
138
139 BOOL NTAPI W32kDosPathNameToNtPathName(PCWSTR, PUNICODE_STRING);
140