[WIN32SS] Rewrite GetFontFamilyInfoForSubstitutes to use the subsitute list loaded...
[reactos.git] / reactos / 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 SHORT gusLanguageID;
25
26 SHORT 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 _Success_(return!=FALSE)
58 BOOL
59 NTAPI
60 RegReadUserSetting(
61 _In_z_ PCWSTR pwszKeyName,
62 _In_z_ PCWSTR pwszValueName,
63 _In_ ULONG ulType,
64 _Out_writes_(cbDataSize) _When_(ulType == REG_SZ, _Post_z_) PVOID pvData,
65 _In_ ULONG cbDataSize);
66
67 BOOL
68 NTAPI
69 RegWriteUserSetting(
70 IN PCWSTR pwszKeyName,
71 IN PCWSTR pwszValueName,
72 IN ULONG ulType,
73 OUT PVOID pvData,
74 IN ULONG cbDataSize);
75
76 VOID FASTCALL
77 SetLastNtError(
78 NTSTATUS Status);
79
80 typedef struct _GDI_POOL *PGDI_POOL;
81
82 PGDI_POOL
83 NTAPI
84 GdiPoolCreate(
85 ULONG cjAllocSize,
86 ULONG ulTag);
87
88 VOID
89 NTAPI
90 GdiPoolDestroy(PGDI_POOL pPool);
91
92 PVOID
93 NTAPI
94 GdiPoolAllocate(
95 PGDI_POOL pPool);
96
97 VOID
98 NTAPI
99 GdiPoolFree(
100 PGDI_POOL pPool,
101 PVOID pvAlloc);
102
103 FORCEINLINE
104 VOID
105 ExAcquirePushLockExclusive(PEX_PUSH_LOCK PushLock)
106 {
107 /* Try acquiring the lock */
108 if (InterlockedBitTestAndSet((PLONG)PushLock, EX_PUSH_LOCK_LOCK_V))
109 {
110 /* Someone changed it, use the slow path */
111 ExfAcquirePushLockExclusive(PushLock);
112 }
113 }
114
115 FORCEINLINE
116 BOOLEAN
117 ExTryAcquirePushLockExclusive(PEX_PUSH_LOCK PushLock)
118 {
119 /* Try acquiring the lock */
120 return !InterlockedBitTestAndSet((PLONG)PushLock, EX_PUSH_LOCK_LOCK_V);
121 }
122
123 FORCEINLINE
124 VOID
125 ExReleasePushLockExclusive(PEX_PUSH_LOCK PushLock)
126 {
127 EX_PUSH_LOCK OldValue;
128
129 /* Unlock the pushlock */
130 OldValue.Value = InterlockedExchangeAddSizeT((PSIZE_T)PushLock,
131 -(SSIZE_T)EX_PUSH_LOCK_LOCK);
132 /* Check if anyone is waiting on it and it's not already waking */
133 if ((OldValue.Waiting) && !(OldValue.Waking))
134 {
135 /* Wake it up */
136 ExfTryToWakePushLock(PushLock);
137 }
138 }
139
140 FORCEINLINE
141 VOID
142 _ExInitializePushLock(PEX_PUSH_LOCK Lock)
143 {
144 *(PULONG_PTR)Lock = 0;
145 }
146 #define ExInitializePushLock _ExInitializePushLock
147
148 NTSTATUS FASTCALL
149 IntSafeCopyUnicodeString(PUNICODE_STRING Dest,
150 PUNICODE_STRING Source);
151
152 NTSTATUS FASTCALL
153 IntSafeCopyUnicodeStringTerminateNULL(PUNICODE_STRING Dest,
154 PUNICODE_STRING Source);
155
156 HBITMAP NTAPI UserLoadImage(PCWSTR);
157
158 BOOL NTAPI W32kDosPathNameToNtPathName(PCWSTR, PUNICODE_STRING);
159