ReactOS 0.4.16-dev-1408-gbc64f3a
sync.c
Go to the documentation of this file.
1/*
2 * Kernel synchronization objects
3 *
4 * Copyright 1998 Alexandre Julliard
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19 */
20
21#include <stdarg.h>
22#include <string.h>
23#include <stdio.h>
24
25#include "ntstatus.h"
26#define WIN32_NO_STATUS
27#include "windef.h"
28#include "winbase.h"
29#include "wincon.h"
30#include "winerror.h"
31#include "winnls.h"
32#include "winternl.h"
33#include "winioctl.h"
34#include "ddk/wdm.h"
35
36#include "kernelbase.h"
37#include "wine/asm.h"
38#include "wine/exception.h"
39#include "wine/debug.h"
40
42
43static const struct _KUSER_SHARED_DATA *user_shared_data = (struct _KUSER_SHARED_DATA *)0x7ffe0000;
44
45/* check if current version is NT or Win95 */
46static inline BOOL is_version_nt(void)
47{
48 return !(GetVersion() & 0x80000000);
49}
50
51/* helper for kernel32->ntdll timeout format conversion */
53{
54 if (timeout == INFINITE) return NULL;
55 time->QuadPart = (ULONGLONG)timeout * -10000;
56 return time;
57}
58
59
60/***********************************************************************
61 * BaseGetNamedObjectDirectory (kernelbase.@)
62 */
64{
65 static HANDLE handle;
66 WCHAR buffer[64];
70
71 if (!handle)
72 {
73 HANDLE dir;
74
75 swprintf( buffer, ARRAY_SIZE(buffer), L"\\Sessions\\%u\\BaseNamedObjects",
81 {
82 /* someone beat us here... */
84 }
85 }
86 *dir = handle;
87 return status;
88}
89
92{
93 attr->Length = sizeof(*attr);
94 attr->RootDirectory = 0;
95 attr->ObjectName = NULL;
96 attr->Attributes = OBJ_OPENIF | ((sa && sa->bInheritHandle) ? OBJ_INHERIT : 0);
97 attr->SecurityDescriptor = sa ? sa->lpSecurityDescriptor : NULL;
98 attr->SecurityQualityOfService = NULL;
99 if (name)
100 {
102 attr->ObjectName = nameW;
103 BaseGetNamedObjectDirectory( &attr->RootDirectory );
104 }
105}
106
108 BOOL inherit, const WCHAR *name )
109{
110 HANDLE dir;
111
112 if (!name)
113 {
115 return FALSE;
116 }
120 return TRUE;
121}
122
123
124/***********************************************************************
125 * Time functions
126 ***********************************************************************/
127
128
129/*********************************************************************
130 * GetSystemTimes (kernelbase.@)
131 */
133{
134 LARGE_INTEGER idle_time, kernel_time, user_time;
136 ULONG ret_size;
137 DWORD i, cpus = NtCurrentTeb()->Peb->NumberOfProcessors;
138
139 if (!(info = HeapAlloc( GetProcessHeap(), 0, sizeof(*info) * cpus )))
140 {
142 return FALSE;
143 }
145 sizeof(*info) * cpus, &ret_size )))
146 {
148 return FALSE;
149 }
150 idle_time.QuadPart = 0;
151 kernel_time.QuadPart = 0;
152 user_time.QuadPart = 0;
153 for (i = 0; i < cpus; i++)
154 {
155 idle_time.QuadPart += info[i].IdleTime.QuadPart;
156 kernel_time.QuadPart += info[i].KernelTime.QuadPart;
157 user_time.QuadPart += info[i].UserTime.QuadPart;
158 }
159 if (idle)
160 {
161 idle->dwLowDateTime = idle_time.u.LowPart;
162 idle->dwHighDateTime = idle_time.u.HighPart;
163 }
164 if (kernel)
165 {
166 kernel->dwLowDateTime = kernel_time.u.LowPart;
167 kernel->dwHighDateTime = kernel_time.u.HighPart;
168 }
169 if (user)
170 {
171 user->dwLowDateTime = user_time.u.LowPart;
172 user->dwHighDateTime = user_time.u.HighPart;
173 }
175 return TRUE;
176}
177
178
179/******************************************************************************
180 * GetTickCount (kernelbase.@)
181 */
183{
184 /* note: we ignore TickCountMultiplier */
185 return user_shared_data->TickCount.LowPart;
186}
187
188
189/******************************************************************************
190 * GetTickCount64 (kernelbase.@)
191 */
193{
194 ULONG high, low;
195
196 do
197 {
198 high = user_shared_data->TickCount.High1Time;
199 low = user_shared_data->TickCount.LowPart;
200 }
201 while (high != user_shared_data->TickCount.High2Time);
202 /* note: we ignore TickCountMultiplier */
203 return (ULONGLONG)high << 32 | low;
204}
205
206
207/******************************************************************************
208 * QueryInterruptTime (kernelbase.@)
209 */
211{
212 ULONG high, low;
213
214 do
215 {
216 high = user_shared_data->InterruptTime.High1Time;
217 low = user_shared_data->InterruptTime.LowPart;
218 }
219 while (high != user_shared_data->InterruptTime.High2Time);
220 *time = (ULONGLONG)high << 32 | low;
221}
222
223
224/******************************************************************************
225 * QueryInterruptTimePrecise (kernelbase.@)
226 */
228{
229 static int once;
230 if (!once++) FIXME( "(%p) semi-stub\n", time );
231
233}
234
235
236/***********************************************************************
237 * QueryUnbiasedInterruptTimePrecise (kernelbase.@)
238 */
240{
241 static int once;
242 if (!once++) FIXME( "(%p): semi-stub.\n", time );
243
245}
246
247
248/***********************************************************************
249 * QueryIdleProcessorCycleTime (kernelbase.@)
250 */
252{
253 ULONG ret_size;
255
256 if (!*size || !status) *size = ret_size;
257 return TRUE;
258}
259
260
261/***********************************************************************
262 * QueryIdleProcessorCycleTimeEx (kernelbase.@)
263 */
265{
266 ULONG ret_size;
268 times, *size, &ret_size );
269 if (!*size || !status) *size = ret_size;
270 return TRUE;
271}
272
273
274/***********************************************************************
275 * Waits
276 ***********************************************************************/
277
278
280{
281 if ((handle == (HANDLE)STD_INPUT_HANDLE) ||
285
286 return handle;
287}
288
289
290/***********************************************************************
291 * RegisterWaitForSingleObjectEx (kernelbase.@)
292 */
295{
296 HANDLE ret;
297
298 TRACE( "%p %p %p %ld %ld\n", handle, callback, context, timeout, flags );
299
302 return ret;
303}
304
305
306/***********************************************************************
307 * SignalObjectAndWait (kernelbase.@)
308 */
310 DWORD timeout, BOOL alertable )
311{
314
315 TRACE( "%p %p %ld %d\n", signal, wait, timeout, alertable );
316
318 if (HIWORD(status))
319 {
322 }
323 return status;
324}
325
326
327/***********************************************************************
328 * Sleep (kernelbase.@)
329 */
331{
333
335}
336
337
338/******************************************************************************
339 * SleepEx (kernelbase.@)
340 */
342{
345
348 return 0;
349}
350
351
352/***********************************************************************
353 * UnregisterWaitEx (kernelbase.@)
354 */
356{
358}
359
360
361/***********************************************************************
362 * WaitForSingleObject (kernelbase.@)
363 */
365{
367}
368
369
370/***********************************************************************
371 * WaitForSingleObjectEx (kernelbase.@)
372 */
374{
375 return WaitForMultipleObjectsEx( 1, &handle, FALSE, timeout, alertable );
376}
377
378
379/***********************************************************************
380 * WaitForMultipleObjects (kernelbase.@)
381 */
383 BOOL wait_all, DWORD timeout )
384{
385 return WaitForMultipleObjectsEx( count, handles, wait_all, timeout, FALSE );
386}
387
388
389/***********************************************************************
390 * WaitForMultipleObjectsEx (kernelbase.@)
391 */
393 BOOL wait_all, DWORD timeout, BOOL alertable )
394{
398 unsigned int i;
399
401 {
403 return WAIT_FAILED;
404 }
405 for (i = 0; i < count; i++) hloc[i] = normalize_std_handle( handles[i] );
406
407 status = NtWaitForMultipleObjects( count, hloc, !wait_all, alertable,
409 if (HIWORD(status)) /* is it an error code? */
410 {
413 }
414 return status;
415}
416
417
418/******************************************************************************
419 * WaitForDebugEvent (kernelbase.@)
420 */
422{
426
427 for (;;)
428 {
430 switch (status)
431 {
432 case STATUS_SUCCESS:
433 /* continue on wide print exceptions to force resending an ANSI one. */
434 if (state.NewState == DbgExceptionStateChange)
435 {
436 DBGKM_EXCEPTION *info = &state.StateInfo.Exception;
437 DWORD code = info->ExceptionRecord.ExceptionCode;
438 if (code == DBG_PRINTEXCEPTION_WIDE_C && info->ExceptionRecord.NumberParameters >= 2)
439 {
441 break;
442 }
443 }
445 return TRUE;
446 case STATUS_USER_APC:
447 continue;
448 case STATUS_TIMEOUT:
450 return FALSE;
451 default:
452 return set_ntstatus( status );
453 }
454 }
455}
456
457/******************************************************************************
458 * WaitForDebugEventEx (kernelbase.@)
459 */
461{
465
466 for (;;)
467 {
469 switch (status)
470 {
471 case STATUS_SUCCESS:
473 return TRUE;
474 case STATUS_USER_APC:
475 continue;
476 case STATUS_TIMEOUT:
478 return FALSE;
479 default:
480 return set_ntstatus( status );
481 }
482 }
483}
484
485
486/***********************************************************************
487 * WaitOnAddress (kernelbase.@)
488 */
490{
491 LARGE_INTEGER to;
492
493 if (timeout != INFINITE)
494 {
495 to.QuadPart = -(LONGLONG)timeout * 10000;
496 return set_ntstatus( RtlWaitOnAddress( (const void *)addr, cmp, size, &to ));
497 }
498 return set_ntstatus( RtlWaitOnAddress( (const void *)addr, cmp, size, NULL ));
499}
500
501
502/***********************************************************************
503 * Events
504 ***********************************************************************/
505
506
507/***********************************************************************
508 * CreateEventA (kernelbase.@)
509 */
511 BOOL initial_state, LPCSTR name )
512{
513 DWORD flags = 0;
514
515 if (manual_reset) flags |= CREATE_EVENT_MANUAL_RESET;
516 if (initial_state) flags |= CREATE_EVENT_INITIAL_SET;
518}
519
520
521/***********************************************************************
522 * CreateEventW (kernelbase.@)
523 */
525 BOOL initial_state, LPCWSTR name )
526{
527 DWORD flags = 0;
528
529 if (manual_reset) flags |= CREATE_EVENT_MANUAL_RESET;
530 if (initial_state) flags |= CREATE_EVENT_INITIAL_SET;
532}
533
534
535/***********************************************************************
536 * CreateEventExA (kernelbase.@)
537 */
540{
542
543 if (!name) return CreateEventExW( sa, NULL, flags, access );
544
546 {
548 return 0;
549 }
550 return CreateEventExW( sa, buffer, flags, access );
551}
552
553
554/***********************************************************************
555 * CreateEventExW (kernelbase.@)
556 */
559{
560 HANDLE ret = 0;
564
565 /* one buggy program needs this
566 * ("Van Dale Groot woordenboek der Nederlandse taal")
567 */
568 __TRY
569 {
571 }
573 {
575 return 0;
576 }
578
580 (flags & CREATE_EVENT_MANUAL_RESET) ? NotificationEvent : SynchronizationEvent,
581 (flags & CREATE_EVENT_INITIAL_SET) != 0 );
584 else
586 return ret;
587}
588
589
590/***********************************************************************
591 * OpenEventA (kernelbase.@)
592 */
594{
596
597 if (!name) return OpenEventW( access, inherit, NULL );
598
600 {
602 return 0;
603 }
604 return OpenEventW( access, inherit, buffer );
605}
606
607
608/***********************************************************************
609 * OpenEventW (kernelbase.@)
610 */
612{
613 HANDLE ret;
616
618
619 if (!get_open_object_attributes( &attr, &nameW, inherit, name )) return 0;
620
621 if (!set_ntstatus( NtOpenEvent( &ret, access, &attr ))) return 0;
622 return ret;
623}
624
625/***********************************************************************
626 * PulseEvent (kernelbase.@)
627 */
629{
631}
632
633
634/***********************************************************************
635 * SetEvent (kernelbase.@)
636 */
638{
639 return set_ntstatus( NtSetEvent( handle, NULL ));
640}
641
642
643/***********************************************************************
644 * ResetEvent (kernelbase.@)
645 */
647{
649}
650
651
652/***********************************************************************
653 * Mutexes
654 ***********************************************************************/
655
656
657/***********************************************************************
658 * CreateMutexA (kernelbase.@)
659 */
661{
662 return CreateMutexExA( sa, name, owner ? CREATE_MUTEX_INITIAL_OWNER : 0, MUTEX_ALL_ACCESS );
663}
664
665
666/***********************************************************************
667 * CreateMutexW (kernelbase.@)
668 */
670{
671 return CreateMutexExW( sa, name, owner ? CREATE_MUTEX_INITIAL_OWNER : 0, MUTEX_ALL_ACCESS );
672}
673
674
675/***********************************************************************
676 * CreateMutexExA (kernelbase.@)
677 */
680{
681 ANSI_STRING nameA;
683
684 if (!name) return CreateMutexExW( sa, NULL, flags, access );
685
686 RtlInitAnsiString( &nameA, name );
687 status = RtlAnsiStringToUnicodeString( &NtCurrentTeb()->StaticUnicodeString, &nameA, FALSE );
688 if (status != STATUS_SUCCESS)
689 {
691 return 0;
692 }
693 return CreateMutexExW( sa, NtCurrentTeb()->StaticUnicodeString.Buffer, flags, access );
694}
695
696
697/***********************************************************************
698 * CreateMutexExW (kernelbase.@)
699 */
702{
703 HANDLE ret = 0;
707
709
710 status = NtCreateMutant( &ret, access, &attr, (flags & CREATE_MUTEX_INITIAL_OWNER) != 0 );
713 else
715 return ret;
716}
717
718
719/***********************************************************************
720 * OpenMutexW (kernelbase.@)
721 */
723{
724 HANDLE ret;
727
729
730 if (!get_open_object_attributes( &attr, &nameW, inherit, name )) return 0;
731
732 if (!set_ntstatus( NtOpenMutant( &ret, access, &attr ))) return 0;
733 return ret;
734}
735
736
737/***********************************************************************
738 * ReleaseMutex (kernelbase.@)
739 */
741{
743}
744
745
746/***********************************************************************
747 * Semaphores
748 ***********************************************************************/
749
750
751/***********************************************************************
752 * CreateSemaphoreW (kernelbase.@)
753 */
756{
757 return CreateSemaphoreExW( sa, initial, max, name, 0, SEMAPHORE_ALL_ACCESS );
758}
759
760
761/***********************************************************************
762 * CreateSemaphoreExW (kernelbase.@)
763 */
766{
767 HANDLE ret = 0;
771
773
774 status = NtCreateSemaphore( &ret, access, &attr, initial, max );
777 else
779 return ret;
780}
781
782
783/***********************************************************************
784 * OpenSemaphoreW (kernelbase.@)
785 */
787{
788 HANDLE ret;
791
793
794 if (!get_open_object_attributes( &attr, &nameW, inherit, name )) return 0;
795
796 if (!set_ntstatus( NtOpenSemaphore( &ret, access, &attr ))) return 0;
797 return ret;
798}
799
800
801/***********************************************************************
802 * ReleaseSemaphore (kernelbase.@)
803 */
805{
806 return set_ntstatus( NtReleaseSemaphore( handle, count, (PULONG)previous ));
807}
808
809
810/***********************************************************************
811 * Waitable timers
812 ***********************************************************************/
813
814
815/***********************************************************************
816 * CreateWaitableTimerW (kernelbase.@)
817 */
819{
820 return CreateWaitableTimerExW( sa, name, manual ? CREATE_WAITABLE_TIMER_MANUAL_RESET : 0,
822}
823
824
825/***********************************************************************
826 * CreateWaitableTimerExW (kernelbase.@)
827 */
830{
835
837
839 (flags & CREATE_WAITABLE_TIMER_MANUAL_RESET) ? NotificationTimer : SynchronizationTimer );
842 else
844 return handle;
845}
846
847
848/***********************************************************************
849 * OpenWaitableTimerW (kernelbase.@)
850 */
852{
856
858
859 if (!get_open_object_attributes( &attr, &nameW, inherit, name )) return 0;
860
861 if (!set_ntstatus( NtOpenTimer( &handle, access, &attr ))) return 0;
862 return handle;
863}
864
865
866/***********************************************************************
867 * SetWaitableTimer (kernelbase.@)
868 */
871{
873 arg, resume, period, NULL );
875}
876
877
878/***********************************************************************
879 * SetWaitableTimerEx (kernelbase.@)
880 */
883 REASON_CONTEXT *context, ULONG tolerabledelay )
884{
885 static int once;
886 if (!once++) FIXME( "(%p, %p, %ld, %p, %p, %p, %ld) semi-stub\n",
887 handle, when, period, callback, arg, context, tolerabledelay );
888
889 return SetWaitableTimer( handle, when, period, callback, arg, FALSE );
890}
891
892
893/***********************************************************************
894 * CancelWaitableTimer (kernelbase.@)
895 */
897{
899}
900
901
902/***********************************************************************
903 * Timer queues
904 ***********************************************************************/
905
906
907/***********************************************************************
908 * CreateTimerQueue (kernelbase.@)
909 */
911{
912 HANDLE q;
913
914 if (!set_ntstatus( RtlCreateTimerQueue( &q ))) return NULL;
915 return q;
916}
917
918
919/***********************************************************************
920 * CreateTimerQueueTimer (kernelbase.@)
921 */
924 DWORD when, DWORD period, ULONG flags )
925{
926 return set_ntstatus( RtlCreateTimer( queue, timer, callback, arg, when, period, flags ));
927}
928
929
930/***********************************************************************
931 * ChangeTimerQueueTimer (kernelbase.@)
932 */
934 ULONG when, ULONG period )
935{
936 return set_ntstatus( RtlUpdateTimer( queue, timer, when, period ));
937}
938
939
940/***********************************************************************
941 * DeleteTimerQueueEx (kernelbase.@)
942 */
944{
946}
947
948
949/***********************************************************************
950 * DeleteTimerQueueTimer (kernelbase.@)
951 */
953{
954 return set_ntstatus( RtlDeleteTimer( queue, timer, event ));
955}
956
957
958/***********************************************************************
959 * Critical sections
960 ***********************************************************************/
961
962
963/***********************************************************************
964 * InitializeCriticalSectionAndSpinCount (kernelbase.@)
965 */
967{
969}
970
971/***********************************************************************
972 * InitializeCriticalSectionEx (kernelbase.@)
973 */
975 DWORD flags )
976{
977 NTSTATUS ret = RtlInitializeCriticalSectionEx( crit, spincount, flags );
978 if (ret) RtlRaiseStatus( ret );
979 return !ret;
980}
981
982
983/***********************************************************************
984 * File mappings
985 ***********************************************************************/
986
987/***********************************************************************
988 * CreateFileMappingW (kernelbase.@)
989 */
991 DWORD size_high, DWORD size_low, LPCWSTR name )
992{
993 static const int sec_flags = (SEC_FILE | SEC_IMAGE | SEC_RESERVE | SEC_COMMIT |
995 HANDLE ret;
997 DWORD access, sec_type;
1001
1002 sec_type = protect & sec_flags;
1003 protect &= ~sec_flags;
1004 if (!sec_type) sec_type = SEC_COMMIT;
1005
1006 /* Win9x compatibility */
1007 if (!protect && !is_version_nt()) protect = PAGE_READONLY;
1008
1009 switch(protect)
1010 {
1011 case PAGE_READONLY:
1012 case PAGE_WRITECOPY:
1014 break;
1015 case PAGE_READWRITE:
1017 break;
1018 case PAGE_EXECUTE_READ:
1021 break;
1024 break;
1025 default:
1027 return 0;
1028 }
1029
1030 size.u.LowPart = size_low;
1031 size.u.HighPart = size_high;
1032
1034 {
1035 file = 0;
1036 if (!size.QuadPart)
1037 {
1039 return 0;
1040 }
1041 }
1042
1044
1045 status = NtCreateSection( &ret, access, &attr, &size, protect, sec_type, file );
1048 else
1050 return ret;
1051}
1052
1053
1054/***********************************************************************
1055 * CreateFileMappingFromApp (kernelbase.@)
1056 */
1059{
1060 return CreateFileMappingW( file, sa, protect, size << 32, size, name );
1061}
1062
1063/***********************************************************************
1064 * OpenFileMappingW (kernelbase.@)
1065 */
1067{
1070 HANDLE ret;
1071
1072 if (!get_open_object_attributes( &attr, &nameW, inherit, name )) return 0;
1073
1075
1076 if (!is_version_nt())
1077 {
1078 /* win9x doesn't do access checks, so try with full access first */
1080 }
1081
1082 if (!set_ntstatus( NtOpenSection( &ret, access, &attr ))) return 0;
1083 return ret;
1084}
1085
1086
1087/***********************************************************************
1088 * OpenFileMappingFromApp (kernelbase.@)
1089 */
1091{
1094 HANDLE ret;
1095
1096 if (!get_open_object_attributes( &attr, &nameW, inherit, name )) return 0;
1097
1099
1100 if (!set_ntstatus( NtOpenSection( &ret, access, &attr ))) return 0;
1101 return ret;
1102}
1103
1104
1105/***********************************************************************
1106 * Condition variables
1107 ***********************************************************************/
1108
1109
1110/***********************************************************************
1111 * SleepConditionVariableCS (kernelbase.@)
1112 */
1115{
1117
1119}
1120
1121
1122/***********************************************************************
1123 * SleepConditionVariableSRW (kernelbase.@)
1124 */
1127{
1129
1132}
1133
1134
1135/***********************************************************************
1136 * I/O completions
1137 ***********************************************************************/
1138
1139
1140/******************************************************************************
1141 * CreateIoCompletionPort (kernelbase.@)
1142 */
1145{
1148 HANDLE ret = port;
1149
1150 TRACE( "(%p, %p, %08Ix, %08lx)\n", handle, port, key, threads );
1151
1152 if (!port)
1153 {
1155 return 0;
1156 }
1157 else if (handle == INVALID_HANDLE_VALUE)
1158 {
1160 return 0;
1161 }
1162
1164 {
1165 info.CompletionPort = ret;
1166 info.CompletionKey = key;
1168 {
1169 if (!port) CloseHandle( ret );
1170 return 0;
1171 }
1172 }
1173 return ret;
1174}
1175
1176
1177/******************************************************************************
1178 * GetQueuedCompletionStatus (kernelbase.@)
1179 */
1182{
1185 LARGE_INTEGER wait_time;
1186
1187 TRACE( "(%p,%p,%p,%p,%ld)\n", port, count, key, overlapped, timeout );
1188
1189 *overlapped = NULL;
1191 get_nt_timeout( &wait_time, timeout ) );
1192 if (status == STATUS_SUCCESS)
1193 {
1195 if (iosb.Status >= 0) return TRUE;
1197 return FALSE;
1198 }
1199
1203 return FALSE;
1204}
1205
1206/******************************************************************************
1207 * GetQueuedCompletionStatusEx (kernelbase.@)
1208 */
1210 ULONG count, ULONG *written,
1211 DWORD timeout, BOOL alertable )
1212{
1214 NTSTATUS ret;
1215
1216 TRACE( "%p %p %lu %p %lu %u\n", port, entries, count, written, timeout, alertable );
1217
1218 ret = NtRemoveIoCompletionEx( port, (FILE_IO_COMPLETION_INFORMATION *)entries, count,
1219 written, get_nt_timeout( &time, timeout ), alertable );
1220 if (ret == STATUS_SUCCESS) return TRUE;
1225 return FALSE;
1226}
1227
1228
1229/******************************************************************************
1230 * PostQueuedCompletionStatus (kernelbase.@)
1231 */
1234{
1235 TRACE( "%p %ld %08Ix %p\n", port, count, key, overlapped );
1236
1238}
1239
1240
1241/***********************************************************************
1242 * Named pipes
1243 ***********************************************************************/
1244
1245
1246/***********************************************************************
1247 * CallNamedPipeW (kernelbase.@)
1248 */
1250 LPVOID output, DWORD out_size,
1251 LPDWORD read_size, DWORD timeout )
1252{
1253 HANDLE pipe;
1254 BOOL ret;
1255 DWORD mode;
1256
1257 TRACE( "%s %p %ld %p %ld %p %ld\n", debugstr_w(name),
1258 input, in_size, output, out_size, read_size, timeout );
1259
1261 if (pipe == INVALID_HANDLE_VALUE)
1262 {
1263 if (!WaitNamedPipeW( name, timeout )) return FALSE;
1265 if (pipe == INVALID_HANDLE_VALUE) return FALSE;
1266 }
1267
1270 if (ret) ret = TransactNamedPipe( pipe, input, in_size, output, out_size, read_size, NULL );
1271 CloseHandle( pipe );
1272 return ret;
1273}
1274
1275
1276/***********************************************************************
1277 * ConnectNamedPipe (kernelbase.@)
1278 */
1280{
1282 IO_STATUS_BLOCK status_block;
1283 LPVOID cvalue = NULL;
1284
1285 TRACE( "(%p,%p)\n", pipe, overlapped );
1286
1287 if (overlapped)
1288 {
1289 overlapped->Internal = STATUS_PENDING;
1290 overlapped->InternalHigh = 0;
1291 if (((ULONG_PTR)overlapped->hEvent & 1) == 0) cvalue = overlapped;
1292 }
1293
1294 status = NtFsControlFile( pipe, overlapped ? overlapped->hEvent : NULL, NULL, cvalue,
1295 overlapped ? (IO_STATUS_BLOCK *)overlapped : &status_block,
1296 FSCTL_PIPE_LISTEN, NULL, 0, NULL, 0 );
1297 if (status == STATUS_PENDING && !overlapped)
1298 {
1300 status = status_block.Status;
1301 }
1302 return set_ntstatus( status );
1303}
1304
1305/***********************************************************************
1306 * CreateNamedPipeW (kernelbase.@)
1307 */
1309 DWORD instances, DWORD out_buff, DWORD in_buff,
1311{
1312 HANDLE handle;
1313 UNICODE_STRING nt_name;
1316 BOOLEAN pipe_type, read_mode, non_block;
1320
1321 TRACE( "(%s, %#08lx, %#08lx, %ld, %ld, %ld, %ld, %p)\n", debugstr_w(name),
1322 open_mode, pipe_mode, instances, out_buff, in_buff, timeout, sa );
1323
1324 if (!RtlDosPathNameToNtPathName_U( name, &nt_name, NULL, NULL ))
1325 {
1327 return INVALID_HANDLE_VALUE;
1328 }
1329 if (nt_name.Length >= MAX_PATH * sizeof(WCHAR) )
1330 {
1332 RtlFreeUnicodeString( &nt_name );
1333 return INVALID_HANDLE_VALUE;
1334 }
1335
1336 attr.Length = sizeof(attr);
1337 attr.RootDirectory = 0;
1338 attr.ObjectName = &nt_name;
1339 attr.Attributes = OBJ_CASE_INSENSITIVE | ((sa && sa->bInheritHandle) ? OBJ_INHERIT : 0);
1340 attr.SecurityDescriptor = sa ? sa->lpSecurityDescriptor : NULL;
1341 attr.SecurityQualityOfService = NULL;
1342
1343 switch (open_mode & 3)
1344 {
1348 break;
1352 break;
1353 case PIPE_ACCESS_DUPLEX:
1356 break;
1357 default:
1359 return INVALID_HANDLE_VALUE;
1360 }
1362 options = 0;
1363 if (open_mode & WRITE_DAC) access |= WRITE_DAC;
1364 if (open_mode & WRITE_OWNER) access |= WRITE_OWNER;
1368 pipe_type = (pipe_mode & PIPE_TYPE_MESSAGE) != 0;
1369 read_mode = (pipe_mode & PIPE_READMODE_MESSAGE) != 0;
1370 non_block = (pipe_mode & PIPE_NOWAIT) != 0;
1371 if (instances >= PIPE_UNLIMITED_INSTANCES) instances = ~0U;
1372
1373 time.QuadPart = (ULONGLONG)timeout * -10000;
1376 read_mode, non_block, instances, in_buff, out_buff, &time );
1377 RtlFreeUnicodeString( &nt_name );
1380 return handle;
1381}
1382
1383
1384/******************************************************************
1385 * CreatePipe (kernelbase.@)
1386 */
1389{
1390 static unsigned int index;
1391 WCHAR name[64];
1392 UNICODE_STRING nt_name;
1396
1397 *read_pipe = *write_pipe = INVALID_HANDLE_VALUE;
1398
1399 attr.Length = sizeof(attr);
1400 attr.RootDirectory = 0;
1401 attr.ObjectName = &nt_name;
1402 attr.Attributes = OBJ_CASE_INSENSITIVE | ((sa && sa->bInheritHandle) ? OBJ_INHERIT : 0);
1403 attr.SecurityDescriptor = sa ? sa->lpSecurityDescriptor : NULL;
1404 attr.SecurityQualityOfService = NULL;
1405
1406 if (!size) size = 4096;
1407
1408 timeout.QuadPart = (ULONGLONG)NMPWAIT_USE_DEFAULT_WAIT * -10000;
1409
1410 /* generate a unique pipe name (system wide) */
1411 for (;;)
1412 {
1413 swprintf( name, ARRAY_SIZE(name), L"\\??\\pipe\\Win32.Pipes.%08lu.%08u",
1415 RtlInitUnicodeString( &nt_name, name );
1419 FALSE, FALSE, FALSE, 1, size, size, &timeout ))
1420 break;
1421 }
1424 {
1425 NtClose( *read_pipe );
1426 return FALSE;
1427 }
1428 return TRUE;
1429}
1430
1431
1432/***********************************************************************
1433 * DisconnectNamedPipe (kernelbase.@)
1434 */
1436{
1437 IO_STATUS_BLOCK io_block;
1438
1439 TRACE( "(%p)\n", pipe );
1440 return set_ntstatus( NtFsControlFile( pipe, 0, NULL, NULL, &io_block,
1441 FSCTL_PIPE_DISCONNECT, NULL, 0, NULL, 0 ));
1442}
1443
1444
1445/***********************************************************************
1446 * GetNamedPipeHandleStateW (kernelbase.@)
1447 */
1450 WCHAR *user, DWORD size )
1451{
1453
1454 FIXME( "%p %p %p %p %p %p %ld: semi-stub\n", pipe, state, instances, max_count, timeout, user, size );
1455
1456 if (max_count) *max_count = 0;
1457 if (timeout) *timeout = 0;
1458 if (user && size && !GetEnvironmentVariableW( L"WINEUSERNAME", user, size )) user[0] = 0;
1459
1460 if (state)
1461 {
1463
1465 return FALSE;
1466
1468 (info.CompletionMode ? PIPE_NOWAIT : PIPE_WAIT);
1469 }
1470 if (instances)
1471 {
1473
1474 if (!set_ntstatus( NtQueryInformationFile( pipe, &io, &info, sizeof(info),
1476 return FALSE;
1477 *instances = info.CurrentInstances;
1478 }
1479 return TRUE;
1480}
1481
1482
1483/***********************************************************************
1484 * GetNamedPipeInfo (kernelbase.@)
1485 */
1487 LPDWORD in_size, LPDWORD instances )
1488{
1491
1493 return FALSE;
1494
1495 if (flags)
1496 {
1499 }
1500 if (out_size) *out_size = info.OutboundQuota;
1501 if (in_size) *in_size = info.InboundQuota;
1502 if (instances) *instances = info.MaximumInstances;
1503 return TRUE;
1504}
1505
1506
1507/***********************************************************************
1508 * PeekNamedPipe (kernelbase.@)
1509 */
1511 LPDWORD read_size, LPDWORD avail, LPDWORD message )
1512{
1513 FILE_PIPE_PEEK_BUFFER local_buffer;
1514 FILE_PIPE_PEEK_BUFFER *buffer = &local_buffer;
1517
1518 if (size && !(buffer = HeapAlloc( GetProcessHeap(), 0,
1520 {
1522 return FALSE;
1523 }
1524
1528 if (!status)
1529 {
1531 if (avail) *avail = buffer->ReadDataAvailable;
1532 if (read_size) *read_size = count;
1533 if (message) *message = buffer->MessageLength - count;
1534 if (out_buffer) memcpy( out_buffer, buffer->Data, count );
1535 }
1537
1538 if (buffer != &local_buffer) HeapFree( GetProcessHeap(), 0, buffer );
1539 return !status;
1540}
1541
1542
1543/***********************************************************************
1544 * SetNamedPipeHandleState (kernelbase.@)
1545 */
1548{
1552
1553 TRACE( "%p %p/%ld %p %p\n", pipe, mode, mode ? *mode : 0, count, timeout );
1554 if (count || timeout) FIXME( "Unsupported arguments\n" );
1555
1556 if (mode)
1557 {
1559 else
1560 {
1561 info.CompletionMode = (*mode & PIPE_NOWAIT) ?
1563 info.ReadMode = (*mode & PIPE_READMODE_MESSAGE) ?
1566 }
1567 }
1568 return set_ntstatus( status );
1569}
1570
1571/***********************************************************************
1572 * TransactNamedPipe (kernelbase.@)
1573 */
1575 LPVOID read_buf, DWORD read_size, LPDWORD bytes_read,
1577{
1578 IO_STATUS_BLOCK default_iosb, *iosb = &default_iosb;
1579 HANDLE event = NULL;
1580 void *cvalue = NULL;
1582
1583 TRACE( "%p %p %lu %p %lu %p %p\n", handle,
1584 write_buf, write_size, read_buf, read_size, bytes_read, overlapped );
1585
1586 if (overlapped)
1587 {
1588 event = overlapped->hEvent;
1590 if (((ULONG_PTR)event & 1) == 0) cvalue = overlapped;
1591 }
1592 else
1593 {
1594 iosb->Information = 0;
1595 }
1596
1598 write_buf, write_size, read_buf, read_size );
1599 if (status == STATUS_PENDING && !overlapped)
1600 {
1602 status = iosb->Status;
1603 }
1604
1605 if (bytes_read) *bytes_read = overlapped && status ? 0 : iosb->Information;
1606 return set_ntstatus( status );
1607}
1608
1609
1610/***********************************************************************
1611 * WaitNamedPipeW (kernelbase.@)
1612 */
1614{
1615 static const int prefix_len = sizeof(L"\\??\\PIPE\\") - sizeof(WCHAR);
1617 UNICODE_STRING nt_name, pipe_dev_name;
1618 FILE_PIPE_WAIT_FOR_BUFFER *pipe_wait;
1621 ULONG wait_size;
1622 HANDLE pipe_dev;
1623
1624 TRACE( "%s 0x%08lx\n", debugstr_w(name), timeout );
1625
1626 if (!RtlDosPathNameToNtPathName_U( name, &nt_name, NULL, NULL )) return FALSE;
1627
1628 if (nt_name.Length >= MAX_PATH * sizeof(WCHAR) ||
1629 nt_name.Length < prefix_len ||
1630 wcsnicmp( nt_name.Buffer, L"\\??\\PIPE\\", prefix_len / sizeof(WCHAR) ))
1631 {
1632 RtlFreeUnicodeString( &nt_name );
1634 return FALSE;
1635 }
1636
1637 wait_size = offsetof( FILE_PIPE_WAIT_FOR_BUFFER, Name[(nt_name.Length - prefix_len) / sizeof(WCHAR)] );
1638 if (!(pipe_wait = HeapAlloc( GetProcessHeap(), 0, wait_size)))
1639 {
1640 RtlFreeUnicodeString( &nt_name );
1642 return FALSE;
1643 }
1644
1645 pipe_dev_name.Buffer = nt_name.Buffer;
1646 pipe_dev_name.Length = prefix_len;
1647 pipe_dev_name.MaximumLength = prefix_len;
1652 if (status != STATUS_SUCCESS)
1653 {
1654 HeapFree( GetProcessHeap(), 0, pipe_wait );
1655 RtlFreeUnicodeString( &nt_name );
1657 return FALSE;
1658 }
1659
1662 pipe_wait->Timeout.QuadPart = ((ULONGLONG)0x7fffffff << 32) | 0xffffffff;
1663 else
1664 pipe_wait->Timeout.QuadPart = (ULONGLONG)timeout * -10000;
1665 pipe_wait->NameLength = nt_name.Length - prefix_len;
1666 memcpy( pipe_wait->Name, nt_name.Buffer + prefix_len/sizeof(WCHAR), pipe_wait->NameLength );
1667 RtlFreeUnicodeString( &nt_name );
1668
1670 pipe_wait, wait_size, NULL, 0 );
1671
1672 HeapFree( GetProcessHeap(), 0, pipe_wait );
1673 NtClose( pipe_dev );
1674 return set_ntstatus( status );
1675}
1676
1677
1678
1679/***********************************************************************
1680 * Interlocked functions
1681 ***********************************************************************/
1682
1683
1684/***********************************************************************
1685 * InitOnceBeginInitialize (kernelbase.@)
1686 */
1688 BOOL *pending, void **context )
1689{
1691 if (status >= 0) *pending = (status == STATUS_PENDING);
1693 return status >= 0;
1694}
1695
1696
1697/***********************************************************************
1698 * InitOnceComplete (kernelbase.@)
1699 */
1701{
1702 return set_ntstatus( RtlRunOnceComplete( once, flags, context ));
1703}
1704
1705
1706/***********************************************************************
1707 * InitOnceExecuteOnce (kernelbase.@)
1708 */
1710 void *param, void **context )
1711{
1713}
1714
1715#ifdef __i386__
1716
1717/***********************************************************************
1718 * InterlockedCompareExchange (kernelbase.@)
1719 */
1721 "movl 12(%esp),%eax\n\t"
1722 "movl 8(%esp),%ecx\n\t"
1723 "movl 4(%esp),%edx\n\t"
1724 "lock; cmpxchgl %ecx,(%edx)\n\t"
1725 "ret $12")
1726
1727/***********************************************************************
1728 * InterlockedExchange (kernelbase.@)
1729 */
1731 "movl 8(%esp),%eax\n\t"
1732 "movl 4(%esp),%edx\n\t"
1733 "lock; xchgl %eax,(%edx)\n\t"
1734 "ret $8")
1735
1736/***********************************************************************
1737 * InterlockedExchangeAdd (kernelbase.@)
1738 */
1740 "movl 8(%esp),%eax\n\t"
1741 "movl 4(%esp),%edx\n\t"
1742 "lock; xaddl %eax,(%edx)\n\t"
1743 "ret $8")
1744
1745/***********************************************************************
1746 * InterlockedIncrement (kernelbase.@)
1747 */
1749 "movl 4(%esp),%edx\n\t"
1750 "movl $1,%eax\n\t"
1751 "lock; xaddl %eax,(%edx)\n\t"
1752 "incl %eax\n\t"
1753 "ret $4")
1754
1755/***********************************************************************
1756 * InterlockedDecrement (kernelbase.@)
1757 */
1759 "movl 4(%esp),%edx\n\t"
1760 "movl $-1,%eax\n\t"
1761 "lock; xaddl %eax,(%edx)\n\t"
1762 "decl %eax\n\t"
1763 "ret $4")
1764
1765#endif /* __i386__ */
NTSTATUS NTAPI NtCreateSection(OUT PHANDLE SectionHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN PLARGE_INTEGER MaximumSize OPTIONAL, IN ULONG SectionPageProtection OPTIONAL, IN ULONG AllocationAttributes, IN HANDLE FileHandle OPTIONAL)
Definition: section.c:3076
NTSTATUS NTAPI NtOpenSection(OUT PHANDLE SectionHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes)
Definition: section.c:3204
unsigned char BOOLEAN
static int avail
Definition: adh-main.c:39
static struct sockaddr_in sa
Definition: adnsresfilter.c:69
static int state
Definition: maze.c:121
unsigned int dir
Definition: maze.c:112
#define InterlockedIncrement
Definition: armddk.h:53
#define InterlockedExchange
Definition: armddk.h:54
#define InterlockedDecrement
Definition: armddk.h:52
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
LONG NTSTATUS
Definition: precomp.h:26
static const WCHAR nameW[]
Definition: main.c:49
#define FILE_NON_DIRECTORY_FILE
Definition: constants.h:492
#define index(s, c)
Definition: various.h:29
void idle(int argc, const char *argv[])
Definition: cmds.c:1581
void user(int argc, const char *argv[])
Definition: cmds.c:1350
#define ARRAY_SIZE(A)
Definition: main.h:20
#define U(x)
Definition: wordpad.c:45
HANDLE WINAPI GetStdHandle(IN DWORD nStdHandle)
Definition: console.c:203
#define FIXME(fmt,...)
Definition: precomp.h:53
#define HandleToULong(h)
Definition: basetsd.h:95
Definition: _queue.h:67
#define STATUS_TIMEOUT
Definition: d3dkmdt.h:49
#define STATUS_PENDING
Definition: d3dkmdt.h:43
@ DbgExceptionStateChange
Definition: dbgktypes.h:119
NTSTATUS NTAPI DbgUiContinue(IN PCLIENT_ID ClientId, IN NTSTATUS ContinueStatus)
Definition: dbgui.c:47
NTSTATUS NTAPI DbgUiConvertStateChangeStructure(IN PDBGUI_WAIT_STATE_CHANGE WaitStateChange, OUT PVOID Win32DebugEvent)
Definition: dbgui.c:61
NTSTATUS NTAPI DbgUiWaitStateChange(OUT PDBGUI_WAIT_STATE_CHANGE WaitStateChange, IN PLARGE_INTEGER TimeOut OPTIONAL)
Definition: dbgui.c:274
#define ERROR_NOT_ENOUGH_MEMORY
Definition: dderror.h:7
#define WAIT_TIMEOUT
Definition: dderror.h:14
#define ERROR_OUTOFMEMORY
Definition: deptool.c:13
#define ERROR_SUCCESS
Definition: deptool.c:10
LPWSTR Name
Definition: desk.c:124
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
static __inline BOOL set_ntstatus(NTSTATUS status)
Definition: security.c:227
#define CloseHandle
Definition: compat.h:739
#define GetProcessHeap()
Definition: compat.h:736
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
#define PAGE_READONLY
Definition: compat.h:138
#define SECTION_MAP_READ
Definition: compat.h:139
#define wcsnicmp
Definition: compat.h:14
#define CP_ACP
Definition: compat.h:109
#define GetEnvironmentVariableW(x, y, z)
Definition: compat.h:755
#define OPEN_EXISTING
Definition: compat.h:775
#define SetLastError(x)
Definition: compat.h:752
#define INVALID_HANDLE_VALUE
Definition: compat.h:731
#define HeapAlloc
Definition: compat.h:733
#define CreateFileMappingW(a, b, c, d, e, f)
Definition: compat.h:744
#define __TRY
Definition: compat.h:80
#define GENERIC_READ
Definition: compat.h:135
#define MAX_PATH
Definition: compat.h:34
#define HeapFree(x, y, z)
Definition: compat.h:735
#define CreateFileW
Definition: compat.h:741
#define __ENDTRY
Definition: compat.h:82
#define MultiByteToWideChar
Definition: compat.h:110
#define FILE_SHARE_READ
Definition: compat.h:136
#define __EXCEPT_PAGE_FAULT
Definition: compat.h:81
PPEB Peb
Definition: dllmain.c:27
BOOL WINAPI SleepConditionVariableCS(PCONDITION_VARIABLE ConditionVariable, PCRITICAL_SECTION CriticalSection, DWORD Timeout)
Definition: sync.c:59
BOOL WINAPI SleepConditionVariableSRW(PCONDITION_VARIABLE ConditionVariable, PSRWLOCK Lock, DWORD Timeout, ULONG Flags)
Definition: sync.c:75
BOOL WINAPI InitializeCriticalSectionEx(OUT LPCRITICAL_SECTION lpCriticalSection, IN DWORD dwSpinCount, IN DWORD flags)
Definition: sync.c:107
DWORD WINAPI DECLSPEC_HOTPATCH WaitForMultipleObjectsEx(DWORD count, const HANDLE *handles, BOOL wait_all, DWORD timeout, BOOL alertable)
Definition: sync.c:392
HANDLE WINAPI DECLSPEC_HOTPATCH CreateMutexExW(SECURITY_ATTRIBUTES *sa, LPCWSTR name, DWORD flags, DWORD access)
Definition: sync.c:700
static HANDLE normalize_std_handle(HANDLE handle)
Definition: sync.c:279
void WINAPI DECLSPEC_HOTPATCH QueryInterruptTimePrecise(ULONGLONG *time)
Definition: sync.c:227
BOOL WINAPI DECLSPEC_HOTPATCH GetSystemTimes(FILETIME *idle, FILETIME *kernel, FILETIME *user)
Definition: sync.c:132
HANDLE WINAPI DECLSPEC_HOTPATCH CreateEventA(SECURITY_ATTRIBUTES *sa, BOOL manual_reset, BOOL initial_state, LPCSTR name)
Definition: sync.c:510
BOOL WINAPI DECLSPEC_HOTPATCH CreatePipe(HANDLE *read_pipe, HANDLE *write_pipe, SECURITY_ATTRIBUTES *sa, DWORD size)
Definition: sync.c:1387
HANDLE WINAPI DECLSPEC_HOTPATCH OpenMutexW(DWORD access, BOOL inherit, LPCWSTR name)
Definition: sync.c:722
BOOL WINAPI DECLSPEC_HOTPATCH TransactNamedPipe(HANDLE handle, LPVOID write_buf, DWORD write_size, LPVOID read_buf, DWORD read_size, LPDWORD bytes_read, LPOVERLAPPED overlapped)
Definition: sync.c:1574
HANDLE WINAPI DECLSPEC_HOTPATCH OpenFileMappingFromApp(ULONG access, BOOL inherit, LPCWSTR name)
Definition: sync.c:1090
HANDLE WINAPI DECLSPEC_HOTPATCH CreateIoCompletionPort(HANDLE handle, HANDLE port, ULONG_PTR key, DWORD threads)
Definition: sync.c:1143
DWORD WINAPI DECLSPEC_HOTPATCH SignalObjectAndWait(HANDLE signal, HANDLE wait, DWORD timeout, BOOL alertable)
Definition: sync.c:309
void WINAPI DECLSPEC_HOTPATCH Sleep(DWORD timeout)
Definition: sync.c:330
BOOL WINAPI DECLSPEC_HOTPATCH WaitNamedPipeW(LPCWSTR name, DWORD timeout)
Definition: sync.c:1613
HANDLE WINAPI DECLSPEC_HOTPATCH OpenEventW(DWORD access, BOOL inherit, LPCWSTR name)
Definition: sync.c:611
BOOL WINAPI DECLSPEC_HOTPATCH CallNamedPipeW(LPCWSTR name, LPVOID input, DWORD in_size, LPVOID output, DWORD out_size, LPDWORD read_size, DWORD timeout)
Definition: sync.c:1249
static BOOL is_version_nt(void)
Definition: sync.c:46
HANDLE WINAPI DECLSPEC_HOTPATCH CreateEventExA(SECURITY_ATTRIBUTES *sa, LPCSTR name, DWORD flags, DWORD access)
Definition: sync.c:538
BOOL WINAPI QueryIdleProcessorCycleTime(ULONG *size, ULONG64 *times)
Definition: sync.c:251
HANDLE WINAPI DECLSPEC_HOTPATCH CreateNamedPipeW(LPCWSTR name, DWORD open_mode, DWORD pipe_mode, DWORD instances, DWORD out_buff, DWORD in_buff, DWORD timeout, LPSECURITY_ATTRIBUTES sa)
Definition: sync.c:1308
BOOL WINAPI DECLSPEC_HOTPATCH SetEvent(HANDLE handle)
Definition: sync.c:637
BOOL WINAPI DECLSPEC_HOTPATCH WaitForDebugEventEx(DEBUG_EVENT *event, DWORD timeout)
Definition: sync.c:460
BOOL WINAPI QueryIdleProcessorCycleTimeEx(USHORT group_id, ULONG *size, ULONG64 *times)
Definition: sync.c:264
static const struct _KUSER_SHARED_DATA * user_shared_data
Definition: sync.c:43
BOOL WINAPI DECLSPEC_HOTPATCH SetNamedPipeHandleState(HANDLE pipe, LPDWORD mode, LPDWORD count, LPDWORD timeout)
Definition: sync.c:1546
BOOL WINAPI DECLSPEC_HOTPATCH ChangeTimerQueueTimer(HANDLE queue, HANDLE timer, ULONG when, ULONG period)
Definition: sync.c:933
HANDLE WINAPI DECLSPEC_HOTPATCH CreateMutexA(SECURITY_ATTRIBUTES *sa, BOOL owner, LPCSTR name)
Definition: sync.c:660
HANDLE WINAPI DECLSPEC_HOTPATCH CreateSemaphoreW(SECURITY_ATTRIBUTES *sa, LONG initial, LONG max, LPCWSTR name)
Definition: sync.c:754
BOOL WINAPI DECLSPEC_HOTPATCH GetNamedPipeHandleStateW(HANDLE pipe, DWORD *state, DWORD *instances, DWORD *max_count, DWORD *timeout, WCHAR *user, DWORD size)
Definition: sync.c:1448
BOOL WINAPI DECLSPEC_HOTPATCH GetQueuedCompletionStatusEx(HANDLE port, OVERLAPPED_ENTRY *entries, ULONG count, ULONG *written, DWORD timeout, BOOL alertable)
Definition: sync.c:1209
BOOL WINAPI DECLSPEC_HOTPATCH SetWaitableTimer(HANDLE handle, const LARGE_INTEGER *when, LONG period, PTIMERAPCROUTINE callback, LPVOID arg, BOOL resume)
Definition: sync.c:869
HANDLE WINAPI DECLSPEC_HOTPATCH CreateEventW(SECURITY_ATTRIBUTES *sa, BOOL manual_reset, BOOL initial_state, LPCWSTR name)
Definition: sync.c:524
HANDLE WINAPI DECLSPEC_HOTPATCH CreateFileMappingFromApp(HANDLE file, LPSECURITY_ATTRIBUTES sa, ULONG protect, ULONG64 size, LPCWSTR name)
Definition: sync.c:1057
BOOL WINAPI DECLSPEC_HOTPATCH DeleteTimerQueueTimer(HANDLE queue, HANDLE timer, HANDLE event)
Definition: sync.c:952
static BOOL get_open_object_attributes(OBJECT_ATTRIBUTES *attr, UNICODE_STRING *nameW, BOOL inherit, const WCHAR *name)
Definition: sync.c:107
BOOL WINAPI DECLSPEC_HOTPATCH InitOnceExecuteOnce(INIT_ONCE *once, PINIT_ONCE_FN func, void *param, void **context)
Definition: sync.c:1709
DWORD WINAPI DECLSPEC_HOTPATCH WaitForSingleObjectEx(HANDLE handle, DWORD timeout, BOOL alertable)
Definition: sync.c:373
BOOL WINAPI DECLSPEC_HOTPATCH WaitForDebugEvent(DEBUG_EVENT *event, DWORD timeout)
Definition: sync.c:421
BOOL WINAPI DECLSPEC_HOTPATCH ResetEvent(HANDLE handle)
Definition: sync.c:646
NTSTATUS WINAPI BaseGetNamedObjectDirectory(HANDLE *dir)
Definition: sync.c:63
DWORD WINAPI DECLSPEC_HOTPATCH SleepEx(DWORD timeout, BOOL alertable)
Definition: sync.c:341
BOOL WINAPI DECLSPEC_HOTPATCH InitOnceBeginInitialize(INIT_ONCE *once, DWORD flags, BOOL *pending, void **context)
Definition: sync.c:1687
HANDLE WINAPI DECLSPEC_HOTPATCH OpenSemaphoreW(DWORD access, BOOL inherit, LPCWSTR name)
Definition: sync.c:786
BOOL WINAPI DECLSPEC_HOTPATCH InitializeCriticalSectionAndSpinCount(CRITICAL_SECTION *crit, DWORD count)
Definition: sync.c:966
ULONGLONG WINAPI DECLSPEC_HOTPATCH GetTickCount64(void)
Definition: sync.c:192
BOOL WINAPI DECLSPEC_HOTPATCH SetWaitableTimerEx(HANDLE handle, const LARGE_INTEGER *when, LONG period, PTIMERAPCROUTINE callback, LPVOID arg, REASON_CONTEXT *context, ULONG tolerabledelay)
Definition: sync.c:881
void WINAPI DECLSPEC_HOTPATCH QueryInterruptTime(ULONGLONG *time)
Definition: sync.c:210
BOOL WINAPI DECLSPEC_HOTPATCH GetNamedPipeInfo(HANDLE pipe, LPDWORD flags, LPDWORD out_size, LPDWORD in_size, LPDWORD instances)
Definition: sync.c:1486
DWORD WINAPI DECLSPEC_HOTPATCH WaitForMultipleObjects(DWORD count, const HANDLE *handles, BOOL wait_all, DWORD timeout)
Definition: sync.c:382
BOOL WINAPI DECLSPEC_HOTPATCH PulseEvent(HANDLE handle)
Definition: sync.c:628
BOOL WINAPI DECLSPEC_HOTPATCH ConnectNamedPipe(HANDLE pipe, LPOVERLAPPED overlapped)
Definition: sync.c:1279
BOOL WINAPI DECLSPEC_HOTPATCH WaitOnAddress(volatile void *addr, void *cmp, SIZE_T size, DWORD timeout)
Definition: sync.c:489
HANDLE WINAPI DECLSPEC_HOTPATCH CreateWaitableTimerExW(SECURITY_ATTRIBUTES *sa, LPCWSTR name, DWORD flags, DWORD access)
Definition: sync.c:828
HANDLE WINAPI DECLSPEC_HOTPATCH RegisterWaitForSingleObjectEx(HANDLE handle, WAITORTIMERCALLBACK callback, PVOID context, ULONG timeout, ULONG flags)
Definition: sync.c:293
BOOL WINAPI DECLSPEC_HOTPATCH ReleaseSemaphore(HANDLE handle, LONG count, LONG *previous)
Definition: sync.c:804
BOOL WINAPI DECLSPEC_HOTPATCH UnregisterWaitEx(HANDLE handle, HANDLE event)
Definition: sync.c:355
HANDLE WINAPI DECLSPEC_HOTPATCH OpenFileMappingW(DWORD access, BOOL inherit, LPCWSTR name)
Definition: sync.c:1066
BOOL WINAPI DECLSPEC_HOTPATCH InitOnceComplete(INIT_ONCE *once, DWORD flags, void *context)
Definition: sync.c:1700
BOOL WINAPI DECLSPEC_HOTPATCH CancelWaitableTimer(HANDLE handle)
Definition: sync.c:896
HANDLE WINAPI DECLSPEC_HOTPATCH OpenEventA(DWORD access, BOOL inherit, LPCSTR name)
Definition: sync.c:593
BOOL WINAPI DECLSPEC_HOTPATCH PostQueuedCompletionStatus(HANDLE port, DWORD count, ULONG_PTR key, LPOVERLAPPED overlapped)
Definition: sync.c:1232
HANDLE WINAPI DECLSPEC_HOTPATCH OpenWaitableTimerW(DWORD access, BOOL inherit, LPCWSTR name)
Definition: sync.c:851
void WINAPI DECLSPEC_HOTPATCH QueryUnbiasedInterruptTimePrecise(ULONGLONG *time)
Definition: sync.c:239
static LARGE_INTEGER * get_nt_timeout(LARGE_INTEGER *time, DWORD timeout)
Definition: sync.c:52
DWORD WINAPI DECLSPEC_HOTPATCH WaitForSingleObject(HANDLE handle, DWORD timeout)
Definition: sync.c:364
BOOL WINAPI DECLSPEC_HOTPATCH ReleaseMutex(HANDLE handle)
Definition: sync.c:740
HANDLE WINAPI DECLSPEC_HOTPATCH CreateSemaphoreExW(SECURITY_ATTRIBUTES *sa, LONG initial, LONG max, LPCWSTR name, DWORD flags, DWORD access)
Definition: sync.c:764
BOOL WINAPI DECLSPEC_HOTPATCH PeekNamedPipe(HANDLE pipe, LPVOID out_buffer, DWORD size, LPDWORD read_size, LPDWORD avail, LPDWORD message)
Definition: sync.c:1510
HANDLE WINAPI DECLSPEC_HOTPATCH CreateMutexExA(SECURITY_ATTRIBUTES *sa, LPCSTR name, DWORD flags, DWORD access)
Definition: sync.c:678
HANDLE WINAPI DECLSPEC_HOTPATCH CreateWaitableTimerW(SECURITY_ATTRIBUTES *sa, BOOL manual, LPCWSTR name)
Definition: sync.c:818
HANDLE WINAPI DECLSPEC_HOTPATCH CreateEventExW(SECURITY_ATTRIBUTES *sa, LPCWSTR name, DWORD flags, DWORD access)
Definition: sync.c:557
BOOL WINAPI DECLSPEC_HOTPATCH CreateTimerQueueTimer(PHANDLE timer, HANDLE queue, WAITORTIMERCALLBACK callback, PVOID arg, DWORD when, DWORD period, ULONG flags)
Definition: sync.c:922
static void get_create_object_attributes(OBJECT_ATTRIBUTES *attr, UNICODE_STRING *nameW, SECURITY_ATTRIBUTES *sa, const WCHAR *name)
Definition: sync.c:90
ULONG WINAPI DECLSPEC_HOTPATCH GetTickCount(void)
Definition: sync.c:182
BOOL WINAPI DECLSPEC_HOTPATCH GetQueuedCompletionStatus(HANDLE port, LPDWORD count, PULONG_PTR key, LPOVERLAPPED *overlapped, DWORD timeout)
Definition: sync.c:1180
HANDLE WINAPI DECLSPEC_HOTPATCH CreateTimerQueue(void)
Definition: sync.c:910
HANDLE WINAPI DECLSPEC_HOTPATCH CreateMutexW(SECURITY_ATTRIBUTES *sa, BOOL owner, LPCWSTR name)
Definition: sync.c:669
BOOL WINAPI DECLSPEC_HOTPATCH DeleteTimerQueueEx(HANDLE queue, HANDLE event)
Definition: sync.c:943
BOOL WINAPI DECLSPEC_HOTPATCH DisconnectNamedPipe(HANDLE pipe)
Definition: sync.c:1435
DWORD WINAPI GetVersion(void)
Definition: version.c:1458
USHORT port
Definition: uri.c:228
#define swprintf
Definition: precomp.h:40
return ret
Definition: mutex.c:146
#define L(x)
Definition: resources.c:13
#define INFINITE
Definition: serial.h:102
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
@ SystemProcessorPerformanceInformation
Definition: ntddk_ex.h:19
@ FilePipeLocalInformation
Definition: from_kernel.h:85
@ FilePipeInformation
Definition: from_kernel.h:84
@ FileCompletionInformation
Definition: from_kernel.h:91
#define FILE_SYNCHRONOUS_IO_NONALERT
Definition: from_kernel.h:31
#define FILE_WRITE_THROUGH
Definition: from_kernel.h:26
#define FILE_OPEN_IF
Definition: from_kernel.h:56
Character const *const size_t const max_count
Definition: fullpath.cpp:66
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLdouble GLdouble t
Definition: gl.h:2047
GLdouble GLdouble GLdouble GLdouble q
Definition: gl.h:2063
GLenum func
Definition: glext.h:6028
struct _cl_event * event
Definition: glext.h:7739
GLdouble n
Definition: glext.h:7729
GLuint buffer
Definition: glext.h:5915
GLsizeiptr size
Definition: glext.h:5919
GLuint index
Definition: glext.h:6031
GLenum mode
Definition: glext.h:6217
GLbitfield flags
Definition: glext.h:7161
GLenum const GLvoid * addr
Definition: glext.h:9621
GLuint GLint GLboolean GLint GLenum access
Definition: glext.h:7866
GLenum GLenum variable
Definition: glext.h:9031
GLfloat param
Definition: glext.h:5796
GLenum GLenum GLenum input
Definition: glext.h:9031
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define OBJ_OPENIF
Definition: winternl.h:229
#define OBJ_CASE_INSENSITIVE
Definition: winternl.h:228
#define OBJ_INHERIT
Definition: winternl.h:225
NTSYSAPI NTSTATUS WINAPI NtQuerySystemInformationEx(SYSTEM_INFORMATION_CLASS, void *, ULONG, void *, ULONG, ULONG *)
NTSYSAPI NTSTATUS WINAPI RtlInitializeCriticalSectionEx(RTL_CRITICAL_SECTION *, ULONG, ULONG)
NTSYSAPI NTSTATUS WINAPI RtlQueryUnbiasedInterruptTime(ULONGLONG *)
#define FILE_PIPE_TYPE_MESSAGE
Definition: winternl.h:1863
NTSYSAPI ULONG WINAPI RtlNtStatusToDosError(NTSTATUS)
VOID(CALLBACK * PTIMER_APC_ROUTINE)(PVOID, ULONG, LONG)
Definition: winternl.h:2018
#define InterlockedExchangeAdd
Definition: interlocked.h:196
#define InterlockedCompareExchangePointer
Definition: interlocked.h:144
#define InterlockedCompareExchange
Definition: interlocked.h:119
#define read_buf
Definition: intsym.h:279
NTSTATUS NTAPI NtSetIoCompletion(IN HANDLE IoCompletionPortHandle, IN PVOID CompletionKey, IN PVOID CompletionContext, IN NTSTATUS CompletionStatus, IN ULONG CompletionInformation)
Definition: iocomp.c:569
NTSTATUS NTAPI NtRemoveIoCompletion(IN HANDLE IoCompletionHandle, OUT PVOID *KeyContext, OUT PVOID *ApcContext, OUT PIO_STATUS_BLOCK IoStatusBlock, IN PLARGE_INTEGER Timeout OPTIONAL)
Definition: iocomp.c:445
NTSTATUS NTAPI NtCreateIoCompletion(OUT PHANDLE IoCompletionHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, IN ULONG NumberOfConcurrentThreads)
Definition: iocomp.c:253
#define NtCurrentTeb
#define EVENT_ALL_ACCESS
Definition: isotest.c:82
#define debugstr_w
Definition: kernel32.h:32
__u16 time
Definition: mkdosfs.c:8
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
#define ERROR_ALREADY_EXISTS
Definition: disk.h:80
#define FILE_FLAG_OVERLAPPED
Definition: disk.h:46
#define FILE_FLAG_WRITE_THROUGH
Definition: disk.h:47
unsigned __int64 ULONG64
Definition: imports.h:198
static IPrintDialogCallback callback
Definition: printdlg.c:326
static const struct encodedFiletime times[]
Definition: encode.c:556
static HANDLE ULONG_PTR DWORD threads
Definition: process.c:81
static WAITORTIMERCALLBACK
Definition: thread.c:81
#define cmp(status, error)
Definition: error.c:114
static HANDLE PIO_APC_ROUTINE PVOID PIO_STATUS_BLOCK ULONG PVOID ULONG PVOID ULONG out_size
Definition: file.c:100
static HANDLE PIO_APC_ROUTINE PVOID PIO_STATUS_BLOCK ULONG PVOID ULONG PVOID out_buffer
Definition: file.c:100
#define IO_COMPLETION_ALL_ACCESS
Definition: file.c:72
static HANDLE PIO_APC_ROUTINE PVOID PIO_STATUS_BLOCK io
Definition: file.c:100
static PIO_STATUS_BLOCK iosb
Definition: file.c:98
static HANDLE PIO_APC_ROUTINE PVOID PIO_STATUS_BLOCK ULONG PVOID ULONG in_size
Definition: file.c:100
#define FSCTL_PIPE_LISTEN
Definition: pipe.c:63
static ULONG POBJECT_ATTRIBUTES PIO_STATUS_BLOCK ULONG sharing
Definition: pipe.c:70
static ULONG POBJECT_ATTRIBUTES PIO_STATUS_BLOCK ULONG ULONG ULONG ULONG ULONG read_mode
Definition: pipe.c:71
static ULONG POBJECT_ATTRIBUTES PIO_STATUS_BLOCK ULONG ULONG ULONG ULONG pipe_type
Definition: pipe.c:71
#define InitializeObjectAttributes(p, n, a, r, s)
Definition: reg.c:106
NTSTATUS NTAPI NtOpenMutant(OUT PHANDLE MutantHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes)
Definition: mutant.c:162
NTSTATUS NTAPI NtCreateMutant(OUT PHANDLE MutantHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN BOOLEAN InitialOwner)
Definition: mutant.c:79
NTSTATUS NTAPI NtReleaseMutant(IN HANDLE MutantHandle, IN PLONG PreviousCount OPTIONAL)
Definition: mutant.c:296
#define TIMER_ALL_ACCESS
Definition: extypes.h:116
@ SystemProcessorIdleCycleTimeInformation
Definition: extypes.h:300
#define FILE_PIPE_BYTE_STREAM_MODE
Definition: iotypes.h:77
#define FILE_PIPE_COMPLETE_OPERATION
Definition: iotypes.h:80
#define FILE_PIPE_SERVER_END
Definition: iotypes.h:85
#define FILE_PIPE_MESSAGE_MODE
Definition: iotypes.h:78
#define FILE_PIPE_QUEUE_OPERATION
Definition: iotypes.h:79
#define SEC_NOCACHE
Definition: mmtypes.h:101
#define SEC_COMMIT
Definition: mmtypes.h:100
#define SEC_IMAGE
Definition: mmtypes.h:97
#define SEC_FILE
Definition: mmtypes.h:96
#define SEC_LARGE_PAGES
Definition: mmtypes.h:103
#define SEC_WRITECOMBINE
Definition: mmtypes.h:102
NTSYSAPI NTSTATUS NTAPI RtlCreateTimerQueue(PHANDLE TimerQueue)
Definition: threadpool.c:867
NTSYSAPI NTSTATUS NTAPI RtlInitializeCriticalSectionAndSpinCount(_In_ PRTL_CRITICAL_SECTION CriticalSection, _In_ ULONG SpinCount)
NTSYSAPI NTSTATUS NTAPI RtlRegisterWait(_In_ PHANDLE phNewWaitObject, _In_ HANDLE hObject, _In_ WAITORTIMERCALLBACKFUNC Callback, _In_ PVOID pvContext, _In_ ULONG ulMilliseconds, _In_ ULONG ulFlags)
NTSYSAPI NTSTATUS NTAPI RtlSleepConditionVariableCS(_Inout_ PRTL_CONDITION_VARIABLE ConditionVariable, _Inout_ PRTL_CRITICAL_SECTION CriticalSection, _In_opt_ PLARGE_INTEGER TimeOut)
DECLSPEC_NORETURN NTSYSAPI VOID NTAPI RtlRaiseStatus(_In_ NTSTATUS Status)
NTSYSAPI NTSTATUS NTAPI RtlDeregisterWaitEx(_In_ HANDLE hWaitHandle, _In_opt_ HANDLE hCompletionEvent)
NTSYSAPI NTSTATUS NTAPI RtlDeleteTimer(_In_ HANDLE TimerQueue, _In_ HANDLE Timer, _In_ HANDLE CompletionEvent)
NTSYSAPI NTSTATUS NTAPI RtlCreateTimer(_In_ HANDLE TimerQueue, _In_ PHANDLE phNewTimer, _In_ WAITORTIMERCALLBACKFUNC Callback, _In_ PVOID Parameter, _In_ ULONG DueTime, _In_ ULONG Period, _In_ ULONG Flags)
NTSYSAPI NTSTATUS NTAPI RtlSleepConditionVariableSRW(_Inout_ PRTL_CONDITION_VARIABLE ConditionVariable, _Inout_ PRTL_SRWLOCK SRWLock, _In_opt_ PLARGE_INTEGER TimeOut, _In_ ULONG Flags)
NTSYSAPI NTSTATUS NTAPI RtlDeleteTimerQueueEx(_In_ HANDLE TimerQueue, _In_opt_ HANDLE CompletionEvent)
NTSYSAPI BOOLEAN NTAPI RtlDosPathNameToNtPathName_U(_In_opt_z_ PCWSTR DosPathName, _Out_ PUNICODE_STRING NtPathName, _Out_opt_ PCWSTR *NtFileNamePart, _Out_opt_ PRTL_RELATIVE_NAME_U DirectoryInfo)
NTSYSAPI NTSTATUS NTAPI RtlUpdateTimer(_In_ HANDLE TimerQueue, _In_ HANDLE Timer, _In_ ULONG DueTime, _In_ ULONG Period)
#define SECTION_MAP_EXECUTE
Definition: nt_native.h:1290
NTSYSAPI NTSTATUS NTAPI NtOpenFile(OUT PHANDLE phFile, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, OUT PIO_STATUS_BLOCK pIoStatusBlock, IN ULONG ShareMode, IN ULONG OpenMode)
Definition: file.c:3953
#define FILE_SHARE_WRITE
Definition: nt_native.h:681
#define SYNCHRONIZE
Definition: nt_native.h:61
#define PAGE_WRITECOPY
Definition: nt_native.h:1305
#define DIRECTORY_CREATE_OBJECT
Definition: nt_native.h:1256
#define SECTION_MAP_WRITE
Definition: nt_native.h:1288
#define WRITE_DAC
Definition: nt_native.h:59
#define ACCESS_SYSTEM_SECURITY
Definition: nt_native.h:77
#define PAGE_READWRITE
Definition: nt_native.h:1304
#define PAGE_EXECUTE_READ
Definition: nt_native.h:1307
#define FILE_READ_ATTRIBUTES
Definition: nt_native.h:647
#define SECTION_QUERY
Definition: nt_native.h:1287
#define DIRECTORY_TRAVERSE
Definition: nt_native.h:1255
NTSYSAPI NTSTATUS NTAPI RtlAnsiStringToUnicodeString(PUNICODE_STRING DestinationString, PANSI_STRING SourceString, BOOLEAN AllocateDestinationString)
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define SEC_RESERVE
Definition: nt_native.h:1323
#define FILE_CREATED
Definition: nt_native.h:770
NTSYSAPI NTSTATUS NTAPI NtSetInformationFile(IN HANDLE hFile, OUT PIO_STATUS_BLOCK pIoStatusBlock, IN PVOID FileInformationBuffer, IN ULONG FileInformationBufferLength, IN FILE_INFORMATION_CLASS FileInfoClass)
Definition: iofunc.c:3096
NTSYSAPI NTSTATUS NTAPI NtQueryInformationFile(IN HANDLE hFile, OUT PIO_STATUS_BLOCK pIoStatusBlock, OUT PVOID FileInformationBuffer, IN ULONG FileInformationBufferLength, IN FILE_INFORMATION_CLASS FileInfoClass)
NTSTATUS NTAPI NtDelayExecution(IN BOOLEAN Alertable, IN PLARGE_INTEGER DelayInterval)
Definition: wait.c:876
#define FILE_WRITE_ATTRIBUTES
Definition: nt_native.h:649
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
Definition: obhandle.c:3402
#define PAGE_EXECUTE_WRITECOPY
Definition: nt_native.h:1309
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
#define WRITE_OWNER
Definition: nt_native.h:60
#define GENERIC_WRITE
Definition: nt_native.h:90
NTSYSAPI VOID NTAPI RtlInitAnsiString(PANSI_STRING DestinationString, PCSZ SourceString)
NTSYSAPI NTSTATUS NTAPI NtFsControlFile(IN HANDLE hFile, IN HANDLE hEvent OPTIONAL, IN PIO_APC_ROUTINE IoApcRoutine OPTIONAL, IN PVOID IoApcContext OPTIONAL, OUT PIO_STATUS_BLOCK pIoStatusBlock, IN ULONG DeviceIoControlCode, IN PVOID InBuffer OPTIONAL, IN ULONG InBufferLength, OUT PVOID OutBuffer OPTIONAL, IN ULONG OutBufferLength)
#define PAGE_EXECUTE_READWRITE
Definition: nt_native.h:1308
#define STANDARD_RIGHTS_REQUIRED
Definition: nt_native.h:63
@ NotificationEvent
@ SynchronizationEvent
@ SynchronizationTimer
@ NotificationTimer
NTSTATUS NTAPI NtPulseEvent(IN HANDLE EventHandle, OUT PLONG PreviousState OPTIONAL)
Definition: event.c:244
NTSTATUS NTAPI NtSetEvent(IN HANDLE EventHandle, OUT PLONG PreviousState OPTIONAL)
Definition: event.c:455
NTSTATUS NTAPI NtOpenEvent(OUT PHANDLE EventHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes)
Definition: event.c:181
NTSTATUS NTAPI NtResetEvent(IN HANDLE EventHandle, OUT PLONG PreviousState OPTIONAL)
Definition: event.c:386
NTSTATUS NTAPI NtCreateEvent(OUT PHANDLE EventHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN EVENT_TYPE EventType, IN BOOLEAN InitialState)
Definition: event.c:96
NTSTATUS NTAPI NtOpenTimer(OUT PHANDLE TimerHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes)
Definition: timer.c:463
NTSTATUS NTAPI NtSetTimer(IN HANDLE TimerHandle, IN PLARGE_INTEGER DueTime, IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL, IN PVOID TimerContext OPTIONAL, IN BOOLEAN WakeTimer, IN LONG Period OPTIONAL, OUT PBOOLEAN PreviousState OPTIONAL)
Definition: timer.c:583
NTSTATUS NTAPI NtCreateTimer(OUT PHANDLE TimerHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN TIMER_TYPE TimerType)
Definition: timer.c:372
NTSTATUS NTAPI NtCancelTimer(IN HANDLE TimerHandle, OUT PBOOLEAN CurrentState OPTIONAL)
Definition: timer.c:252
NTSTATUS NTAPI NtCreateNamedPipeFile(OUT PHANDLE FileHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, OUT PIO_STATUS_BLOCK IoStatusBlock, IN ULONG ShareAccess, IN ULONG CreateDisposition, IN ULONG CreateOptions, IN ULONG NamedPipeType, IN ULONG ReadMode, IN ULONG CompletionMode, IN ULONG MaximumInstances, IN ULONG InboundQuota, IN ULONG OutboundQuota, IN PLARGE_INTEGER DefaultTimeout)
Definition: file.c:3859
PVOID *typedef PHANDLE
Definition: ntsecpkg.h:455
#define STATUS_USER_APC
Definition: ntstatus.h:78
#define STATUS_OBJECT_NAME_EXISTS
Definition: ntstatus.h:114
#define STATUS_ABANDONED
Definition: ntstatus.h:75
#define DBG_EXCEPTION_NOT_HANDLED
Definition: ntstatus.h:57
#define STATUS_TIMER_RESUME_IGNORED
Definition: ntstatus.h:151
NTSTATUS NTAPI NtOpenDirectoryObject(OUT PHANDLE DirectoryHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes)
Definition: obdir.c:393
NTSTATUS NTAPI NtWaitForMultipleObjects(IN ULONG ObjectCount, IN PHANDLE HandleArray, IN WAIT_TYPE WaitType, IN BOOLEAN Alertable, IN PLARGE_INTEGER TimeOut OPTIONAL)
Definition: obwait.c:46
NTSTATUS NTAPI NtSignalAndWaitForSingleObject(IN HANDLE ObjectHandleToSignal, IN HANDLE WaitableObjectHandle, IN BOOLEAN Alertable, IN PLARGE_INTEGER TimeOut OPTIONAL)
Definition: obwait.c:473
long LONG
Definition: pedump.c:60
unsigned short USHORT
Definition: pedump.c:61
LONG read_pipe(HANDLE hPipe, SOCKET sock)
Definition: pipetunnel.cpp:202
#define __ASM_STDCALL_FUNC(name, args, code)
Definition: asm.h:123
#define FSCTL_PIPE_WAIT
Definition: winioctl.h:199
#define FSCTL_PIPE_TRANSCEIVE
Definition: winioctl.h:198
#define FSCTL_PIPE_PEEK
Definition: winioctl.h:196
#define FSCTL_PIPE_DISCONNECT
Definition: winioctl.h:194
const WCHAR * str
#define offsetof(TYPE, MEMBER)
#define DECLSPEC_HOTPATCH
Definition: config.h:9
int signal
Definition: except.c:84
_Maybe_raises_SEH_exception_ NTSTATUS NTAPI RtlRunOnceExecuteOnce(_Inout_ PRTL_RUN_ONCE RunOnce, _In_ __inner_callback PRTL_RUN_ONCE_INIT_FN InitFn, _Inout_opt_ PVOID Parameter, _Outptr_opt_result_maybenull_ PVOID *Context)
Definition: runonce.c:121
NTSTATUS NTAPI RtlRunOnceComplete(_Inout_ PRTL_RUN_ONCE RunOnce, _In_ ULONG Flags, _In_opt_ PVOID Context)
Definition: runonce.c:73
_Must_inspect_result_ NTSTATUS NTAPI RtlRunOnceBeginInitialize(_Inout_ PRTL_RUN_ONCE RunOnce, _In_ ULONG Flags, _Outptr_opt_result_maybenull_ PVOID *Context)
Definition: runonce.c:22
NTSTATUS NTAPI NtOpenSemaphore(OUT PHANDLE SemaphoreHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes)
Definition: sem.c:161
NTSTATUS NTAPI NtCreateSemaphore(OUT PHANDLE SemaphoreHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN LONG InitialCount, IN LONG MaximumCount)
Definition: sem.c:69
NTSTATUS NTAPI NtReleaseSemaphore(IN HANDLE SemaphoreHandle, IN LONG ReleaseCount, OUT PLONG PreviousCount OPTIONAL)
Definition: sem.c:295
#define STATUS_SUCCESS
Definition: shellext.h:65
#define STATUS_BUFFER_OVERFLOW
Definition: shellext.h:66
namespace GUID const ADDRINFOEXW ADDRINFOEXW struct timeval OVERLAPPED * overlapped
Definition: sock.c:81
#define TRACE(s)
Definition: solgame.cpp:4
NTSYSAPI NTSTATUS NTAPI NtQuerySystemInformation(IN SYSTEM_INFORMATION_CLASS SystemInfoClass, OUT PVOID SystemInfoBuffer, IN ULONG SystemInfoBufferSize, OUT PULONG BytesReturned OPTIONAL)
DWORD dwHighDateTime
Definition: mapidefs.h:66
DWORD dwLowDateTime
Definition: mapidefs.h:65
LARGE_INTEGER Timeout
Definition: winioctl.h:457
Definition: winbase.h:858
ULONG SessionId
Definition: btrfs_drv.h:1919
USHORT MaximumLength
Definition: env_spec_w32.h:370
Definition: cookie.c:202
Definition: inflate.c:139
Definition: http.c:7252
Definition: fci.c:127
Definition: copy.c:22
Definition: tftpd.h:60
Definition: name.c:39
Definition: ps.c:97
Definition: dhcpd.h:245
#define max(a, b)
Definition: svc.c:63
data ALIGN8 ebp subl $4
Definition: synth_sse3d.h:57
ecx edi movl ebx edx edi decl ecx esi eax jecxz decl eax andl eax esi movl edx movl TEMP incl eax andl eax ecx incl ebx testl $1
Definition: synth_sse3d.h:93
ecx edi movl ebx edx edi decl ecx esi eax jecxz decl eax andl eax esi movl eax
Definition: synth_sse3d.h:85
ecx edi movl ebx edx edi decl ecx esi eax jecxz decl eax andl eax esi movl edx
Definition: synth_sse3d.h:87
movl(%ebp)
rwlock_t lock
Definition: tcpcore.h:0
uint32_t * PULONG_PTR
Definition: typedefs.h:65
uint32_t * PULONG
Definition: typedefs.h:59
#define FIELD_OFFSET(t, f)
Definition: typedefs.h:255
int64_t LONGLONG
Definition: typedefs.h:68
ULONG_PTR SIZE_T
Definition: typedefs.h:80
uint32_t * LPDWORD
Definition: typedefs.h:59
uint32_t ULONG_PTR
Definition: typedefs.h:65
uint32_t ULONG
Definition: typedefs.h:59
uint64_t ULONGLONG
Definition: typedefs.h:67
#define HIWORD(l)
Definition: typedefs.h:247
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135
static EFI_HANDLE * handles
Definition: uefidisk.c:62
LONGLONG QuadPart
Definition: typedefs.h:114
struct _LARGE_INTEGER::@2473 u
#define PIPE_CLIENT_END
Definition: winbase.h:181
#define PIPE_ACCESS_INBOUND
Definition: winbase.h:173
#define STD_OUTPUT_HANDLE
Definition: winbase.h:301
#define STD_INPUT_HANDLE
Definition: winbase.h:300
BOOL(WINAPI * PINIT_ONCE_FN)(_Inout_ PINIT_ONCE InitOnce, _Inout_opt_ PVOID Parameter, _Outptr_opt_result_maybenull_ PVOID *Context)
Definition: winbase.h:3983
#define PIPE_READMODE_BYTE
Definition: winbase.h:177
#define PIPE_SERVER_END
Definition: winbase.h:182
#define NMPWAIT_WAIT_FOREVER
Definition: winbase.h:141
#define NMPWAIT_USE_DEFAULT_WAIT
Definition: winbase.h:142
#define PIPE_ACCESS_DUPLEX
Definition: winbase.h:172
#define WAIT_IO_COMPLETION
Definition: winbase.h:444
#define MUTEX_ALL_ACCESS
Definition: winbase.h:166
#define FILE_MAP_COPY
Definition: winbase.h:161
#define MAXIMUM_WAIT_OBJECTS
Definition: winbase.h:437
DWORD WINAPI GetCurrentProcessId(void)
Definition: proc.c:1158
#define STD_ERROR_HANDLE
Definition: winbase.h:302
#define PIPE_WAIT
Definition: winbase.h:179
#define PIPE_READMODE_MESSAGE
Definition: winbase.h:178
#define SEMAPHORE_ALL_ACCESS
Definition: winbase.h:168
#define PIPE_ACCESS_OUTBOUND
Definition: winbase.h:174
#define PIPE_TYPE_BYTE
Definition: winbase.h:175
RTL_RUN_ONCE INIT_ONCE
Definition: winbase.h:3972
#define PIPE_NOWAIT
Definition: winbase.h:180
#define PIPE_TYPE_MESSAGE
Definition: winbase.h:176
#define WAIT_FAILED
Definition: winbase.h:446
void(CALLBACK * PTIMERAPCROUTINE)(PVOID, DWORD, DWORD)
Definition: winbase.h:1496
#define PIPE_UNLIMITED_INSTANCES
Definition: winbase.h:183
#define WINAPI
Definition: msvc.h:6
#define ERROR_ABANDONED_WAIT_0
Definition: winerror.h:516
#define ERROR_SEM_TIMEOUT
Definition: winerror.h:193
#define ERROR_PATH_NOT_FOUND
Definition: winerror.h:106
#define ERROR_FILENAME_EXCED_RANGE
Definition: winerror.h:263
#define DBG_PRINTEXCEPTION_WIDE_C
Definition: winnt_old.h:145
RTL_RUN_ONCE_INIT_FN * PRTL_RUN_ONCE_INIT_FN
Definition: rtltypes.h:338
const char * LPCSTR
Definition: xmlstorage.h:183
__wchar_t WCHAR
Definition: xmlstorage.h:180
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185