<html>
<head>
<style><!--
  body {background-color:#ffffff;}
  .file {border:1px solid #eeeeee;margin-top:1em;margin-bottom:1em;}
  .pathname {font-family:monospace; float:right;}
  .fileheader {margin-bottom:.5em;}
  .diff {margin:0;}
  .tasklist {padding:4px;border:1px dashed #000000;margin-top:1em;}
  .tasklist ul {margin-top:0;margin-bottom:0;}
  tr.alt {background-color:#eeeeee}
  #added {background-color:#ddffdd;}
  #addedchars {background-color:#99ff99;font-weight:bolder;}
  tr.alt #added {background-color:#ccf7cc;}
  #removed {background-color:#ffdddd;}
  #removedchars {background-color:#ff9999;font-weight:bolder;}
  tr.alt #removed {background-color:#f7cccc;}
  #info {color:#888888;}
  #context {background-color:#eeeeee;}
  td {padding-left:.3em;padding-right:.3em;}
  tr.head {border-bottom-width:1px;border-bottom-style:solid;}
  tr.head td {padding:0;padding-top:.2em;}
  .task {background-color:#ffff00;}
  .comment {padding:4px;border:1px dashed #000000;background-color:#ffffdd}
  .error {color:red;}
  hr {border-width:0px;height:2px;background:black;}
--></style>
</head>
<body>
<table cellspacing="0" cellpadding="0" border="0" rules="cols">
<tr class="head"><td colspan="4">Commit in <b><tt>reactos</tt></b> on win32k_user_reconstruction</td></tr>
<tr><td><tt>include/<a href="#file1">base.h</a></tt></td><td align="right" id="added">+2</td><td align="right" id="removed">-2</td><td nowrap="nowrap" align="center"><a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/include/base.h?rev=1.38&amp;content-type=text/x-cvsweb-markup">1.38</a> <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/include/base.h.diff?r1=text&amp;tr1=1.38&amp;r2=text&amp;tr2=1.38.8.1&amp;f=h">-&gt;</a> <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/include/base.h?rev=1.38.8.1&amp;content-type=text/x-cvsweb-markup">1.38.8.1</a></td></tr>
<tr class="alt"><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file2">funcs.h</a></tt></td><td align="right" id="added">+2</td><td align="right" id="removed">-25</td><td nowrap="nowrap" align="center"><a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/include/funcs.h?rev=1.55&amp;content-type=text/x-cvsweb-markup">1.55</a> <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/include/funcs.h.diff?r1=text&amp;tr1=1.55&amp;r2=text&amp;tr2=1.55.8.1&amp;f=h">-&gt;</a> <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/include/funcs.h?rev=1.55.8.1&amp;content-type=text/x-cvsweb-markup">1.55.8.1</a></td></tr>
<tr><td><tt>include/ntdll/<a href="#file3">rtl.h</a></tt></td><td align="right" id="added">+34</td><td align="right" id="removed">-1</td><td nowrap="nowrap" align="center"><a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/include/ntdll/rtl.h?rev=1.43&amp;content-type=text/x-cvsweb-markup">1.43</a> <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/include/ntdll/rtl.h.diff?r1=text&amp;tr1=1.43&amp;r2=text&amp;tr2=1.43.12.1&amp;f=h">-&gt;</a> <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/include/ntdll/rtl.h?rev=1.43.12.1&amp;content-type=text/x-cvsweb-markup">1.43.12.1</a></td></tr>
<tr class="alt"><td><tt>lib/kernel32/<a href="#file4">makefile</a></tt></td><td align="right" id="added">+2</td><td align="right" id="removed">-2</td><td nowrap="nowrap" align="center"><a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib/kernel32/makefile?rev=1.81&amp;content-type=text/x-cvsweb-markup">1.81</a> <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib/kernel32/makefile.diff?r1=text&amp;tr1=1.81&amp;r2=text&amp;tr2=1.81.2.1&amp;f=h">-&gt;</a> <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib/kernel32/makefile?rev=1.81.2.1&amp;content-type=text/x-cvsweb-markup">1.81.2.1</a></td></tr>
<tr><td><tt>lib/kernel32/misc/<a href="#file5"><span id="added">timerqueue.c</span></a></tt></td><td align="right" id="added">+377</td><td></td><td nowrap="nowrap" align="right">added <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib/kernel32/misc/timerqueue.c?rev=1.1.2.1&amp;content-type=text/x-cvsweb-markup">1.1.2.1</a></td></tr>
<tr class="alt"><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file6">stubs.c</a></tt></td><td align="right" id="added">+1</td><td align="right" id="removed">-122</td><td nowrap="nowrap" align="center"><a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib/kernel32/misc/stubs.c?rev=1.79&amp;content-type=text/x-cvsweb-markup">1.79</a> <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib/kernel32/misc/stubs.c.diff?r1=text&amp;tr1=1.79&amp;r2=text&amp;tr2=1.79.2.1&amp;f=h">-&gt;</a> <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib/kernel32/misc/stubs.c?rev=1.79.2.1&amp;content-type=text/x-cvsweb-markup">1.79.2.1</a></td></tr>
<tr><td><tt>lib/ntdll/def/<a href="#file7">ntdll.def</a></tt></td><td align="right" id="added">+7</td><td align="right" id="removed">-1</td><td nowrap="nowrap" align="center"><a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib/ntdll/def/ntdll.def?rev=1.123&amp;content-type=text/x-cvsweb-markup">1.123</a> <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib/ntdll/def/ntdll.def.diff?r1=text&amp;tr1=1.123&amp;r2=text&amp;tr2=1.123.2.1&amp;f=h">-&gt;</a> <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib/ntdll/def/ntdll.def?rev=1.123.2.1&amp;content-type=text/x-cvsweb-markup">1.123.2.1</a></td></tr>
<tr class="alt"><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file8">ntdll.edf</a></tt></td><td align="right" id="added">+7</td><td align="right" id="removed">-1</td><td nowrap="nowrap" align="center"><a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib/ntdll/def/ntdll.edf?rev=1.113&amp;content-type=text/x-cvsweb-markup">1.113</a> <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib/ntdll/def/ntdll.edf.diff?r1=text&amp;tr1=1.113&amp;r2=text&amp;tr2=1.113.2.1&amp;f=h">-&gt;</a> <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib/ntdll/def/ntdll.edf?rev=1.113.2.1&amp;content-type=text/x-cvsweb-markup">1.113.2.1</a></td></tr>
<tr><td><tt>lib/ntdll/<a href="#file9">makefile</a></tt></td><td align="right" id="added">+2</td><td align="right" id="removed">-1</td><td nowrap="nowrap" align="center"><a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib/ntdll/makefile?rev=1.105&amp;content-type=text/x-cvsweb-markup">1.105</a> <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib/ntdll/makefile.diff?r1=text&amp;tr1=1.105&amp;r2=text&amp;tr2=1.105.2.1&amp;f=h">-&gt;</a> <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib/ntdll/makefile?rev=1.105.2.1&amp;content-type=text/x-cvsweb-markup">1.105.2.1</a></td></tr>
<tr class="alt"><td><tt>lib/user32/misc/<a href="#file10">misc.c</a></tt></td><td align="right" id="added">+7</td><td align="right" id="removed">-4</td><td nowrap="nowrap" align="center"><a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib/user32/misc/misc.c?rev=1.5&amp;content-type=text/x-cvsweb-markup">1.5</a> <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib/user32/misc/misc.c.diff?r1=text&amp;tr1=1.5&amp;r2=text&amp;tr2=1.5.8.1&amp;f=h">-&gt;</a> <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib/user32/misc/misc.c?rev=1.5.8.1&amp;content-type=text/x-cvsweb-markup">1.5.8.1</a></td></tr>
<tr><td><tt>subsys/system/winlogon/<a href="#file11">winlogon.c</a></tt></td><td align="right" id="added">+2</td><td align="right" id="removed">-3</td><td nowrap="nowrap" align="center"><a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/subsys/system/winlogon/winlogon.c?rev=1.31&amp;content-type=text/x-cvsweb-markup">1.31</a> <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/subsys/system/winlogon/winlogon.c.diff?r1=text&amp;tr1=1.31&amp;r2=text&amp;tr2=1.31.2.1&amp;f=h">-&gt;</a> <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/subsys/system/winlogon/winlogon.c?rev=1.31.2.1&amp;content-type=text/x-cvsweb-markup">1.31.2.1</a></td></tr>
<tr class="alt"><td><tt>subsys/win32k/include/<a href="#file12">internal.h</a></tt></td><td align="right" id="added">+1</td><td></td><td nowrap="nowrap" align="center"><a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/subsys/win32k/include/internal.h?rev=1.1.2.1&amp;content-type=text/x-cvsweb-markup">1.1.2.1</a> <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/subsys/win32k/include/internal.h.diff?r1=text&amp;tr1=1.1.2.1&amp;r2=text&amp;tr2=1.1.2.2&amp;f=h">-&gt;</a> <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/subsys/win32k/include/internal.h?rev=1.1.2.2&amp;content-type=text/x-cvsweb-markup">1.1.2.2</a></td></tr>
<tr><td><tt>subsys/win32k/ntuser/<a href="#file13">misc.c</a></tt></td><td align="right" id="added">+24</td><td align="right" id="removed">-19</td><td nowrap="nowrap" align="center"><a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/subsys/win32k/ntuser/misc.c?rev=1.81.2.1&amp;content-type=text/x-cvsweb-markup">1.81.2.1</a> <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/subsys/win32k/ntuser/misc.c.diff?r1=text&amp;tr1=1.81.2.1&amp;r2=text&amp;tr2=1.81.2.2&amp;f=h">-&gt;</a> <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/subsys/win32k/ntuser/misc.c?rev=1.81.2.2&amp;content-type=text/x-cvsweb-markup">1.81.2.2</a></td></tr>
<tr class="alt"><td><tt>w32api/include/<a href="#file14">winuser.h</a></tt></td><td align="right" id="added">+1</td><td></td><td nowrap="nowrap" align="center"><a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/w32api/include/winuser.h?rev=1.7&amp;content-type=text/x-cvsweb-markup">1.7</a> <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/w32api/include/winuser.h.diff?r1=text&amp;tr1=1.7&amp;r2=text&amp;tr2=1.7.2.1&amp;f=h">-&gt;</a> <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/w32api/include/winuser.h?rev=1.7.2.1&amp;content-type=text/x-cvsweb-markup">1.7.2.1</a></td></tr>
<tr><td><tt>apps/tests/thrdheap/<a href="#file15"><span id="added">.cvsignore</span></a></tt></td><td align="right" id="added">+6</td><td></td><td nowrap="nowrap" align="right">added <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/apps/tests/thrdheap/.cvsignore?rev=1.1.2.1&amp;content-type=text/x-cvsweb-markup">1.1.2.1</a></td></tr>
<tr class="alt"><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file16"><span id="added">makefile</span></a></tt></td><td align="right" id="added">+21</td><td></td><td nowrap="nowrap" align="right">added <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/apps/tests/thrdheap/makefile?rev=1.1.2.1&amp;content-type=text/x-cvsweb-markup">1.1.2.1</a></td></tr>
<tr><td><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/<a href="#file17"><span id="added">thrdheap.c</span></a></tt></td><td align="right" id="added">+115</td><td></td><td nowrap="nowrap" align="right">added <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/apps/tests/thrdheap/thrdheap.c?rev=1.1.2.1&amp;content-type=text/x-cvsweb-markup">1.1.2.1</a></td></tr>
<tr class="alt"><td><tt>lib/ntdll/rtl/<a href="#file18"><span id="added">timerqueue.c</span></a></tt></td><td align="right" id="added">+119</td><td></td><td nowrap="nowrap" align="right">added <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib/ntdll/rtl/timerqueue.c?rev=1.2.2.1&amp;content-type=text/x-cvsweb-markup">1.2.2.1</a></td></tr>
<tr><td></td><td align="right" id="added">+730</td><td align="right" id="removed">-181</td><td></td></tr>
</table>
<small id="info">5 added + 13 modified, total 18 files</small><br />
<div class="tasklist"><ul>
<li><a href="#task1">FIXME - make this thread safe */</a></li>
</ul></div>
<pre class="comment">
merged some changes from HEAD
</pre>
<hr /><a name="file1" /><div class="file">
<span class="pathname"><a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos?only_with_tag=win32k_user_reconstruction">reactos</a>/<a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/include?only_with_tag=win32k_user_reconstruction">include</a><br /></span>
<div class="fileheader"><big><b>base.h</b></big> <small id="info"><a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/include/base.h?rev=1.38&amp;content-type=text/x-cvsweb-markup">1.38</a> <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/include/base.h.diff?r1=text&amp;tr1=1.38&amp;r2=text&amp;tr2=1.38.8.1&amp;f=h">-&gt;</a> <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/include/base.h?rev=1.38.8.1&amp;content-type=text/x-cvsweb-markup">1.38.8.1</a></small></div>
<pre class="diff"><small id="info">diff -u -r1.38 -r1.38.8.1
--- base.h        12 Apr 2004 09:50:01 -0000        1.38
+++ base.h        8 Jul 2004 22:58:10 -0000        1.38.8.1
@@ -733,8 +733,8 @@
</small></pre><pre class="diff" id="context">     HighMemoryResourceNotification
 } MEMORY_RESOURCE_NOTIFICATION_TYPE;
 
</pre><pre class="diff" id="removed">-typedef VOID (CALLBACK *WAITORTIMERCALLBACKFUNC) (PVOID, BOOLEAN );
-typedef WAITORTIMERCALLBACKFUNC WAITORTIMERCALLBACK;
</pre><pre class="diff" id="added">+typedef VOID (CALLBACK *WAITORTIMERCALLBACK) (PVOID, BOOLEAN );
+
</pre><pre class="diff" id="context"> /* End of stuff from ddeml.h in old Cygnus headers */
 /* ----------------------------------------------- */
 
</pre></div>
<hr /><a name="file2" /><div class="file">
<span class="pathname"><a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos?only_with_tag=win32k_user_reconstruction">reactos</a>/<a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/include?only_with_tag=win32k_user_reconstruction">include</a><br /></span>
<div class="fileheader"><big><b>funcs.h</b></big> <small id="info"><a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/include/funcs.h?rev=1.55&amp;content-type=text/x-cvsweb-markup">1.55</a> <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/include/funcs.h.diff?r1=text&amp;tr1=1.55&amp;r2=text&amp;tr2=1.55.8.1&amp;f=h">-&gt;</a> <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/include/funcs.h?rev=1.55.8.1&amp;content-type=text/x-cvsweb-markup">1.55.8.1</a></small></div>
<pre class="diff"><small id="info">diff -u -r1.55 -r1.55.8.1
--- funcs.h        1 May 2004 16:43:13 -0000        1.55
+++ funcs.h        8 Jul 2004 22:58:10 -0000        1.55.8.1
@@ -1073,29 +1073,6 @@
</small></pre><pre class="diff" id="context"> RtlQueryDepthSList (
     PSLIST_HEADER ListHead
     );
</pre><pre class="diff" id="removed">-NTSTATUS
-STDCALL
-RtlCreateTimer(HANDLE TimerQueue,PHANDLE phNewTimer, WAITORTIMERCALLBACK Callback,PVOID Parameter,DWORD DueTime,DWORD Period,ULONG Flags);
-
-NTSTATUS
-STDCALL
-RtlCreateTimerQueue(PHANDLE TimerQueue);
-
-NTSTATUS
-STDCALL
-RtlDeleteTimer(HANDLE TimerQueue,HANDLE Timer,HANDLE CompletionEvent);
-
-NTSTATUS
-STDCALL
-RtlUpdateTimer(HANDLE TimerQueue,HANDLE Timer,ULONG DueTime,ULONG Period);
-
-NTSTATUS
-STDCALL
-RtlDeleteTimerQueueEx(HANDLE TimerQueue,HANDLE CompletionEvent);
-
-NTSTATUS
-STDCALL
-RtlDeleteTimerQueue(HANDLE TimerQueue);
</pre><pre class="diff" id="context"> 
 NTSTATUS
 STDCALL
</pre><pre class="diff"><small id="info">@@ -4627,8 +4604,8 @@
</small></pre><pre class="diff" id="context"> BOOL
 STDCALL
 RegisterLogonProcess(
</pre><pre class="diff" id="removed">-                     HANDLE hprocess,
-                     BOOL x
</pre><pre class="diff" id="added">+                     DWORD dwPprocessId,
+                     BOOL bRegister
</pre><pre class="diff" id="context">                      );
 
 WINBOOL
</pre></div>
<hr /><a name="file3" /><div class="file">
<span class="pathname"><a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos?only_with_tag=win32k_user_reconstruction">reactos</a>/<a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/include?only_with_tag=win32k_user_reconstruction">include</a>/<a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/include/ntdll?only_with_tag=win32k_user_reconstruction">ntdll</a><br /></span>
<div class="fileheader"><big><b>rtl.h</b></big> <small id="info"><a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/include/ntdll/rtl.h?rev=1.43&amp;content-type=text/x-cvsweb-markup">1.43</a> <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/include/ntdll/rtl.h.diff?r1=text&amp;tr1=1.43&amp;r2=text&amp;tr2=1.43.12.1&amp;f=h">-&gt;</a> <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/include/ntdll/rtl.h?rev=1.43.12.1&amp;content-type=text/x-cvsweb-markup">1.43.12.1</a></small></div>
<pre class="diff"><small id="info">diff -u -r1.43 -r1.43.12.1
--- rtl.h        3 Feb 2004 14:19:56 -0000        1.43
+++ rtl.h        8 Jul 2004 22:58:10 -0000        1.43.12.1
@@ -1,4 +1,4 @@
</small></pre><pre class="diff" id="removed">-/* $Id: rtl.h,v 1.43 2004/02/03 14:19:56 ekohl Exp $
</pre><pre class="diff" id="added">+/* $Id: rtl.h,v 1.43.12.1 2004/07/08 22:58:10 weiden Exp $
</pre><pre class="diff" id="context">  *
  */
 
</pre><pre class="diff"><small id="info">@@ -616,6 +616,39 @@
</small></pre><pre class="diff" id="context"> RtlRunEncodeUnicodeString (IN OUT PUCHAR Hash,
                            IN OUT PUNICODE_STRING String);
 
</pre><pre class="diff" id="added">+/* Timer Queue functions */
+
+#ifdef __USE_W32API
+#include &lt;winnt.h&gt;
+#else /* __USE_W32API */
+typedef VOID (CALLBACK *WAITORTIMERCALLBACKFUNC) (PVOID, BOOLEAN );
+#endif /* __USE_W32API */
+
+NTSTATUS
+STDCALL
+RtlCreateTimer(HANDLE TimerQueue,PHANDLE phNewTimer, WAITORTIMERCALLBACKFUNC Callback,PVOID Parameter,DWORD DueTime,DWORD Period,ULONG Flags);
+
+NTSTATUS
+STDCALL
+RtlCreateTimerQueue(PHANDLE TimerQueue);
+
+NTSTATUS
+STDCALL
+RtlDeleteTimer(HANDLE TimerQueue,HANDLE Timer,HANDLE CompletionEvent);
+
+NTSTATUS
+STDCALL
+RtlUpdateTimer(HANDLE TimerQueue,HANDLE Timer,ULONG DueTime,ULONG Period);
+
+NTSTATUS
+STDCALL
+RtlDeleteTimerQueueEx(HANDLE TimerQueue,HANDLE CompletionEvent);
+
+NTSTATUS
+STDCALL
+RtlDeleteTimerQueue(HANDLE TimerQueue);
+
+
</pre><pre class="diff" id="context"> #ifndef __NTDRIVER__
 
 #ifndef __INTERLOCKED_DECLARED
</pre></div>
<hr /><a name="file4" /><div class="file">
<span class="pathname"><a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos?only_with_tag=win32k_user_reconstruction">reactos</a>/<a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib?only_with_tag=win32k_user_reconstruction">lib</a>/<a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib/kernel32?only_with_tag=win32k_user_reconstruction">kernel32</a><br /></span>
<div class="fileheader"><big><b>makefile</b></big> <small id="info"><a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib/kernel32/makefile?rev=1.81&amp;content-type=text/x-cvsweb-markup">1.81</a> <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib/kernel32/makefile.diff?r1=text&amp;tr1=1.81&amp;r2=text&amp;tr2=1.81.2.1&amp;f=h">-&gt;</a> <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib/kernel32/makefile?rev=1.81.2.1&amp;content-type=text/x-cvsweb-markup">1.81.2.1</a></small></div>
<pre class="diff"><small id="info">diff -u -r1.81 -r1.81.2.1
--- makefile        26 Jun 2004 20:11:18 -0000        1.81
+++ makefile        8 Jul 2004 22:58:11 -0000        1.81.2.1
@@ -1,4 +1,4 @@
</small></pre><pre class="diff" id="removed">-# $Id: makefile,v 1.81 2004/06/26 20:11:18 gdalsnes Exp $
</pre><pre class="diff" id="added">+# $Id: makefile,v 1.81.2.1 2004/07/08 22:58:11 weiden Exp $
</pre><pre class="diff" id="context"> 
 PATH_TO_TOP = ../..
 
</pre><pre class="diff"><small id="info">@@ -30,7 +30,7 @@
</small></pre><pre class="diff" id="context"> 
 MISC_OBJECTS = misc/error.o misc/atom.o misc/handle.o misc/env.o \
                misc/dllmain.o misc/comm.o misc/errormsg.o \
</pre><pre class="diff" id="removed">-               misc/console.o misc/time.o misc/toolhelp.o \
</pre><pre class="diff" id="added">+               misc/console.o misc/time.o misc/t<span id="addedchars">imerqueue.o&nbsp;misc/t</span>oolhelp.o \
</pre><pre class="diff" id="context">                misc/stubs.o misc/lang.o misc/ldr.o misc/res.o \
                misc/sysinfo.o misc/profile.o \
                misc/mbchars.o misc/muldiv.o misc/computername.o \
</pre></div>
<hr /><a name="file5" /><div class="file">
<span class="pathname" id="added"><a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos?only_with_tag=win32k_user_reconstruction">reactos</a>/<a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib?only_with_tag=win32k_user_reconstruction">lib</a>/<a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib/kernel32?only_with_tag=win32k_user_reconstruction">kernel32</a>/<a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib/kernel32/misc?only_with_tag=win32k_user_reconstruction">misc</a><br /></span>
<div class="fileheader" id="added"><big><b>timerqueue.c</b></big> <small id="info">added at <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib/kernel32/misc/timerqueue.c?rev=1.1.2.1&amp;content-type=text/x-cvsweb-markup">1.1.2.1</a></small></div>
<pre class="diff"><small id="info">diff -N timerqueue.c
--- /dev/null        1 Jan 1970 00:00:00 -0000
+++ timerqueue.c        8 Jul 2004 22:58:11 -0000        1.1.2.1
@@ -0,0 +1,377 @@
</small></pre><pre class="diff" id="added">+/*
+ *  ReactOS kernel
+ *  Copyright (C) 2004 ReactOS Team
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+/* $Id: timerqueue.c,v 1.1.2.1 2004/07/08 22:58:11 weiden Exp $
+ *
+ * COPYRIGHT:       See COPYING in the top level directory
+ * PROJECT:         ReactOS system libraries
+ * PURPOSE:         Timer Queue functions
+ * FILE:            lib/kernel32/misc/timerqueue.c
+ * PROGRAMER:       Thomas Weidenmueller &lt;w3seek@reactos.com&gt;
+ */
+
+/* INCLUDES ******************************************************************/
+
+#include &lt;k32.h&gt;
+
+#define NDEBUG
+#include "../include/debug.h"
+
+
+/* FUNCTIONS *****************************************************************/
+
+HANDLE DefaultTimerQueue = NULL;
+
+/*
+ * Create the default timer queue for the current process. This function is only
+ * called if CreateTimerQueueTimer() or SetTimerQueueTimer() is called. 
+ * However, ChangeTimerQueueTimer() fails with ERROR_INVALID_PARAMETER if the 
+ * default timer queue has not been created, because it assumes there has to be
+ * a timer queue with a timer if it want's to be changed.
+ */
+static BOOL
+IntCreateDefaultTimerQueue(VOID)
+{
+  NTSTATUS Status;
+  
<a name="task1" />+  /* <span class="task">FIXME</span> - make this thread safe */
+  
+  /* create the timer queue */
+  Status = RtlCreateTimerQueue(&amp;DefaultTimerQueue);
+  if(!NT_SUCCESS(Status))
+  {
+    SetLastErrorByStatus(Status);
+    DPRINT1("Unable to create the default timer queue!\n");
+    return FALSE;
+  }
+  
+  return TRUE;
+}
+
+/*
+ * @implemented
+ */
+BOOL
+STDCALL
+CancelTimerQueueTimer(HANDLE TimerQueue,
+                      HANDLE Timer)
+{
+  /* Since this function is not documented in PSDK and apparently does nothing
+     but delete the timer, we just do the same as DeleteTimerQueueTimer(), without
+     passing a completion event. */
+  NTSTATUS Status;
+  
+  if(TimerQueue == NULL)
+  {
+    /* let's use the process' default timer queue. We assume the default timer
+       queue has been created with a previous call to CreateTimerQueueTimer() or
+       SetTimerQueueTimer(), otherwise this call wouldn't make much sense. */
+    if(!(TimerQueue = DefaultTimerQueue))
+    {
+      SetLastError(ERROR_INVALID_HANDLE);
+      return FALSE;
+    }
+  }
+  
+  if(Timer == NULL)
+  {
+    SetLastError(ERROR_INVALID_PARAMETER);
+    return FALSE;
+  }
+  
+  /* delete the timer */
+  Status = RtlDeleteTimer(TimerQueue, Timer, NULL);
+  
+  if(!NT_SUCCESS(Status))
+  {
+    SetLastErrorByStatus(Status);
+    return FALSE; 
+  }
+  
+  return TRUE;
+}
+
+/*
+ * @implemented
+ */
+BOOL
+STDCALL
+ChangeTimerQueueTimer(HANDLE TimerQueue,
+                      HANDLE Timer,
+                      ULONG DueTime,
+                      ULONG Period)
+{
+  NTSTATUS Status;
+  
+  if(TimerQueue == NULL)
+  {
+    /* let's use the process' default timer queue. We assume the default timer
+       queue has been created with a previous call to CreateTimerQueueTimer() or
+       SetTimerQueueTimer(), otherwise this call wouldn't make much sense. */
+    if(!(TimerQueue = DefaultTimerQueue))
+    {
+      SetLastError(ERROR_INVALID_HANDLE);
+      return FALSE;
+    }
+  }
+  
+  if(Timer == NULL)
+  {
+    SetLastError(ERROR_INVALID_PARAMETER);
+    return FALSE;
+  }
+  
+  /* update the timer */
+  Status = RtlUpdateTimer(TimerQueue, Timer, DueTime, Period);
+  if(!NT_SUCCESS(Status))
+  {
+    SetLastErrorByStatus(Status);
+    return FALSE;
+  }
+  
+  return TRUE;
+}
+
+/*
+ * @implemented
+ */
+HANDLE
+STDCALL
+CreateTimerQueue(VOID)
+{
+  HANDLE Handle;
+  NTSTATUS Status;
+  
+  /* create the timer queue */
+  Status = RtlCreateTimerQueue(&amp;Handle);
+  if(!NT_SUCCESS(Status))
+  {
+    SetLastErrorByStatus(Status);
+    return NULL;
+  }
+  
+  return Handle;
+}
+
+/*
+ * @implemented
+ */
+BOOL
+STDCALL
+CreateTimerQueueTimer(PHANDLE phNewTimer,
+                      HANDLE TimerQueue,
+                      WAITORTIMERCALLBACK Callback,
+                      PVOID Parameter,
+                      DWORD DueTime,
+                      DWORD Period,
+                      ULONG Flags)
+{
+  NTSTATUS Status;
+  
+  /* windows seems not to test this parameter at all, so we'll try to clear it here
+     so we don't crash somewhere inside ntdll */
+  *phNewTimer = NULL;
+  
+  if(TimerQueue == NULL)
+  {
+    /* the default timer queue is requested, try to create it if it hasn't been already */
+    if(!(TimerQueue = DefaultTimerQueue))
+    {
+      if(!IntCreateDefaultTimerQueue())
+      {
+        /* IntCreateDefaultTimerQueue() set the last error code already, just fail */
+        return FALSE;
+      }
+      TimerQueue = DefaultTimerQueue;
+    }
+  }
+  
+  /* !!! Win doesn't even check if Callback == NULL, so we don't, too! That'll
+         raise a nice exception later... */
+  
+  /* create the timer */
+  Status = RtlCreateTimer(TimerQueue, phNewTimer, Callback, Parameter, DueTime,
+                          Period, Flags);
+  if(!NT_SUCCESS(Status))
+  {
+    SetLastErrorByStatus(Status);
+    return FALSE;
+  }
+  
+  return TRUE;
+}
+
+/*
+ * @implemented
+ */
+BOOL
+STDCALL
+DeleteTimerQueue(HANDLE TimerQueue)
+{
+  NTSTATUS Status;
+  
+  /* We don't allow the user to delete the default timer queue */
+  if(TimerQueue == NULL)
+  {
+    SetLastError(ERROR_INVALID_HANDLE);
+    return FALSE;
+  }
+  
+  /* delete the timer queue */
+  Status = RtlDeleteTimerQueue(TimerQueue);
+  return NT_SUCCESS(Status);
+}
+
+/*
+ * @implemented
+ */
+BOOL
+STDCALL
+DeleteTimerQueueEx(HANDLE TimerQueue,
+                   HANDLE CompletionEvent)
+{
+  NTSTATUS Status;
+  
+  /* We don't allow the user to delete the default timer queue */
+  if(TimerQueue == NULL)
+  {
+    SetLastError(ERROR_INVALID_HANDLE);
+    return FALSE;
+  }
+  
+  /* delete the queue */
+  Status = RtlDeleteTimerQueueEx(TimerQueue, CompletionEvent);
+  
+  if((CompletionEvent != INVALID_HANDLE_VALUE &amp;&amp; Status == STATUS_PENDING) ||
+     !NT_SUCCESS(Status))
+  {
+    /* In case CompletionEvent == NULL, RtlDeleteTimerQueueEx() returns before
+       all callback routines returned. We set the last error code to STATUS_PENDING
+       and return FALSE. In case CompletionEvent == INVALID_HANDLE_VALUE we only 
+       can get here if another error occured. In case CompletionEvent is something
+       else, we get here and fail, even though it isn't really an error (if Status == STATUS_PENDING).
+       We also handle all other failures the same way. */
+    
+    SetLastErrorByStatus(Status);
+    return FALSE; 
+  }
+  
+  return TRUE;
+}
+
+/*
+ * @implemented
+ */
+BOOL
+STDCALL
+DeleteTimerQueueTimer(HANDLE TimerQueue,
+                      HANDLE Timer,
+                      HANDLE CompletionEvent)
+{
+  NTSTATUS Status;
+  
+  if(TimerQueue == NULL)
+  {
+    /* let's use the process' default timer queue. We assume the default timer
+       queue has been created with a previous call to CreateTimerQueueTimer() or
+       SetTimerQueueTimer(), otherwise this call wouldn't make much sense. */
+    if(!(TimerQueue = DefaultTimerQueue))
+    {
+      SetLastError(ERROR_INVALID_HANDLE);
+      return FALSE;
+    }
+  }
+  
+  if(Timer == NULL)
+  {
+    SetLastError(ERROR_INVALID_PARAMETER);
+    return FALSE;
+  }
+  
+  /* delete the timer */
+  Status = RtlDeleteTimer(TimerQueue, Timer, CompletionEvent);
+  
+  if((CompletionEvent != INVALID_HANDLE_VALUE &amp;&amp; Status == STATUS_PENDING) ||
+     !NT_SUCCESS(Status))
+  {
+    /* In case CompletionEvent == NULL, RtlDeleteTimer() returns before
+       the callback routine returned. We set the last error code to STATUS_PENDING
+       and return FALSE. In case CompletionEvent == INVALID_HANDLE_VALUE we only 
+       can get here if another error occured. In case CompletionEvent is something
+       else, we get here and fail, even though it isn't really an error (if Status == STATUS_PENDING).
+       We also handle all other failures the same way. */
+    
+    SetLastErrorByStatus(Status);
+    return FALSE; 
+  }
+  
+  return TRUE;
+}
+
+/*
+ * @implemented
+ */
+HANDLE
+STDCALL
+SetTimerQueueTimer(HANDLE TimerQueue,
+                   WAITORTIMERCALLBACK Callback,
+                   PVOID Parameter,
+                   DWORD DueTime,
+                   DWORD Period,
+                   BOOL PreferIo)
+{
+  /* Since this function is not documented in PSDK and apparently does nothing
+     but create a timer, we just do the same as CreateTimerQueueTimer(). Unfortunately
+     I don't really know what PreferIo is supposed to be, it propably just affects the
+     Flags parameter of CreateTimerQueueTimer(). Looking at the PSDK documentation of
+     CreateTimerQueueTimer() there's only one flag (WT_EXECUTEINIOTHREAD) that causes
+     the callback function queued to an I/O worker thread. I guess it uses this flag
+     if PreferIo == TRUE, otherwise let's just use WT_EXECUTEDEFAULT. We should
+     test this though, this is only guess work and I'm too lazy to do further 
+     investigation. */
+  
+  HANDLE Timer;
+  NTSTATUS Status;
+  
+  if(TimerQueue == NULL)
+  {
+    /* the default timer queue is requested, try to create it if it hasn't been already */
+    if(!(TimerQueue = DefaultTimerQueue))
+    {
+      if(!IntCreateDefaultTimerQueue())
+      {
+        /* IntCreateDefaultTimerQueue() set the last error code already, just fail */
+        return FALSE;
+      }
+      TimerQueue = DefaultTimerQueue;
+    }
+  }
+  
+  /* create the timer */
+  Status = RtlCreateTimer(TimerQueue, &amp;Timer, Callback, Parameter, DueTime,
+                          Period, (PreferIo ? WT_EXECUTEINIOTHREAD : WT_EXECUTEDEFAULT));
+  if(!NT_SUCCESS(Status))
+  {
+    SetLastErrorByStatus(Status);
+    return NULL;
+  }
+  
+  return Timer;
+}
+
+/* EOF */
</pre></div>
<hr /><a name="file6" /><div class="file">
<span class="pathname"><a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos?only_with_tag=win32k_user_reconstruction">reactos</a>/<a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib?only_with_tag=win32k_user_reconstruction">lib</a>/<a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib/kernel32?only_with_tag=win32k_user_reconstruction">kernel32</a>/<a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib/kernel32/misc?only_with_tag=win32k_user_reconstruction">misc</a><br /></span>
<div class="fileheader"><big><b>stubs.c</b></big> <small id="info"><a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib/kernel32/misc/stubs.c?rev=1.79&amp;content-type=text/x-cvsweb-markup">1.79</a> <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib/kernel32/misc/stubs.c.diff?r1=text&amp;tr1=1.79&amp;r2=text&amp;tr2=1.79.2.1&amp;f=h">-&gt;</a> <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib/kernel32/misc/stubs.c?rev=1.79.2.1&amp;content-type=text/x-cvsweb-markup">1.79.2.1</a></small></div>
<pre class="diff"><small id="info">diff -u -r1.79 -r1.79.2.1
--- stubs.c        26 Jun 2004 12:56:11 -0000        1.79
+++ stubs.c        8 Jul 2004 22:58:11 -0000        1.79.2.1
@@ -1,4 +1,4 @@
</small></pre><pre class="diff" id="removed">-/* $Id: stubs.c,v 1.79 2004/06/26 12:56:11 navaraf Exp $
</pre><pre class="diff" id="added">+/* $Id: stubs.c,v 1.79.2.1 2004/07/08 22:58:11 weiden Exp $
</pre><pre class="diff" id="context">  *
  * KERNEL32.DLL stubs (unimplemented functions)
  * Remove from this file, if you implement them.
</pre><pre class="diff"><small id="info">@@ -653,35 +653,6 @@
</small></pre><pre class="diff" id="context">     return 0;
 }
 
</pre><pre class="diff" id="removed">-/*
- * @unimplemented
- */
-BOOL
-STDCALL
-CancelTimerQueueTimer(
-    HANDLE TimerQueue,
-    HANDLE Timer
-    )
-{
-    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-    return 0;
-}
-/*
- * @unimplemented
- */
-
-BOOL
-STDCALL
-ChangeTimerQueueTimer(
-    HANDLE TimerQueue,
-    HANDLE Timer,
-    ULONG DueTime,
-    ULONG Period
-    )
-{
-    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-    return 0;
-}
</pre><pre class="diff" id="context"> 
 /*
  * @unimplemented
</pre><pre class="diff"><small id="info">@@ -739,38 +710,6 @@
</small></pre><pre class="diff" id="context"> /*
  * @unimplemented
  */
</pre><pre class="diff" id="removed">-HANDLE
-STDCALL
-CreateTimerQueue(
-    VOID
-    )
-{
-    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-    return 0;
-}
-
-/*
- * @unimplemented
- */
-BOOL
-STDCALL
-CreateTimerQueueTimer(
-    PHANDLE phNewTimer,
-    HANDLE TimerQueue,
-    WAITORTIMERCALLBACK Callback,
-    PVOID Parameter,
-    DWORD DueTime,
-    DWORD Period,
-    ULONG Flags
-    )
-{
-    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-    return 0;
-}
-
-/*
- * @unimplemented
- */
</pre><pre class="diff" id="context"> BOOL
 STDCALL
 DeactivateActCtx(
</pre><pre class="diff"><small id="info">@@ -788,48 +727,6 @@
</small></pre><pre class="diff" id="context">  */
 BOOL
 STDCALL
</pre><pre class="diff" id="removed">-DeleteTimerQueue(
-    HANDLE TimerQueue
-    )
-{
-    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-    return 0;
-}
-
-/*
- * @unimplemented
- */
-BOOL
-STDCALL
-DeleteTimerQueueEx(
-    HANDLE TimerQueue,
-    HANDLE CompletionEvent
-    )
-{
-    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-    return 0;
-}
-
-/*
- * @unimplemented
- */
-BOOL
-STDCALL
-DeleteTimerQueueTimer(
-    HANDLE TimerQueue,
-    HANDLE Timer,
-    HANDLE CompletionEvent
-    )
-{
-    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-    return 0;
-}
-
-/*
- * @unimplemented
- */
-BOOL
-STDCALL
</pre><pre class="diff" id="context"> FindActCtxSectionGuid(
     DWORD dwFlags,
     const GUID *lpExtensionGuid,
</pre><pre class="diff"><small id="info">@@ -1461,24 +1358,6 @@
</small></pre><pre class="diff" id="context"> /*
  * @unimplemented
  */
</pre><pre class="diff" id="removed">-HANDLE
-STDCALL
-SetTimerQueueTimer(
-    HANDLE TimerQueue,
-    WAITORTIMERCALLBACK Callback,
-    PVOID Parameter,
-    DWORD DueTime,
-    DWORD Period,
-    BOOL PreferIo
-    )
-{
-    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-    return 0;
-}
-
-/*
- * @unimplemented
- */
</pre><pre class="diff" id="context"> BOOL
 STDCALL
 TerminateJobObject(
</pre></div>
<hr /><a name="file7" /><div class="file">
<span class="pathname"><a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos?only_with_tag=win32k_user_reconstruction">reactos</a>/<a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib?only_with_tag=win32k_user_reconstruction">lib</a>/<a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib/ntdll?only_with_tag=win32k_user_reconstruction">ntdll</a>/<a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib/ntdll/def?only_with_tag=win32k_user_reconstruction">def</a><br /></span>
<div class="fileheader"><big><b>ntdll.def</b></big> <small id="info"><a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib/ntdll/def/ntdll.def?rev=1.123&amp;content-type=text/x-cvsweb-markup">1.123</a> <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib/ntdll/def/ntdll.def.diff?r1=text&amp;tr1=1.123&amp;r2=text&amp;tr2=1.123.2.1&amp;f=h">-&gt;</a> <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib/ntdll/def/ntdll.def?rev=1.123.2.1&amp;content-type=text/x-cvsweb-markup">1.123.2.1</a></small></div>
<pre class="diff"><small id="info">diff -u -r1.123 -r1.123.2.1
--- ntdll.def        3 Jul 2004 17:13:09 -0000        1.123
+++ ntdll.def        8 Jul 2004 22:58:11 -0000        1.123.2.1
@@ -1,4 +1,4 @@
</small></pre><pre class="diff" id="removed">-; $Id: ntdll.def,v 1.123 2004/07/03 17:13:09 hbirr Exp $
</pre><pre class="diff" id="added">+; $Id: ntdll.def,v 1.123.2.1 2004/07/08 22:58:11 weiden Exp $
</pre><pre class="diff" id="context"> ;
 ; ReactOS Operating System
 ;
</pre><pre class="diff"><small id="info">@@ -354,6 +354,8 @@
</small></pre><pre class="diff" id="context"> RtlCreateRegistryKey@8
 RtlCreateSecurityDescriptor@8
 ;RtlCreateTagHeap
</pre><pre class="diff" id="added">+RtlCreateTimer@28
+RtlCreateTimerQueue@4
</pre><pre class="diff" id="context"> RtlCreateUnicodeString@8
 RtlCreateUnicodeStringFromAsciiz@8
 RtlCreateUserProcess@40
</pre><pre class="diff"><small id="info">@@ -377,6 +379,9 @@
</small></pre><pre class="diff" id="context"> RtlDeleteRegistryValue@12
 RtlDeleteResource@4
 ;RtlDeleteSecurityObject
</pre><pre class="diff" id="added">+RtlDeleteTimer@12
+RtlDeleteTimerQueue@4
+RtlDeleteTimerQueueEx@8
</pre><pre class="diff" id="context"> RtlDestroyAtomTable@4
 RtlDestroyEnvironment@4
 RtlDestroyHandleTable@4
</pre><pre class="diff"><small id="info">@@ -623,6 +628,7 @@
</small></pre><pre class="diff" id="context"> RtlUpcaseUnicodeToCustomCPN@24
 RtlUpcaseUnicodeToMultiByteN@20
 RtlUpcaseUnicodeToOemN@20
</pre><pre class="diff" id="added">+RtlUpdateTimer@16
</pre><pre class="diff" id="context"> RtlUpperChar@4
 RtlUpperString@8
 ;RtlUsageHeap
</pre></div>
<hr /><a name="file8" /><div class="file">
<span class="pathname"><a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos?only_with_tag=win32k_user_reconstruction">reactos</a>/<a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib?only_with_tag=win32k_user_reconstruction">lib</a>/<a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib/ntdll?only_with_tag=win32k_user_reconstruction">ntdll</a>/<a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib/ntdll/def?only_with_tag=win32k_user_reconstruction">def</a><br /></span>
<div class="fileheader"><big><b>ntdll.edf</b></big> <small id="info"><a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib/ntdll/def/ntdll.edf?rev=1.113&amp;content-type=text/x-cvsweb-markup">1.113</a> <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib/ntdll/def/ntdll.edf.diff?r1=text&amp;tr1=1.113&amp;r2=text&amp;tr2=1.113.2.1&amp;f=h">-&gt;</a> <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib/ntdll/def/ntdll.edf?rev=1.113.2.1&amp;content-type=text/x-cvsweb-markup">1.113.2.1</a></small></div>
<pre class="diff"><small id="info">diff -u -r1.113 -r1.113.2.1
--- ntdll.edf        3 Jul 2004 17:13:09 -0000        1.113
+++ ntdll.edf        8 Jul 2004 22:58:11 -0000        1.113.2.1
@@ -1,4 +1,4 @@
</small></pre><pre class="diff" id="removed">-; $Id: ntdll.edf,v 1.113 2004/07/03 17:13:09 hbirr Exp $
</pre><pre class="diff" id="added">+; $Id: ntdll.edf,v 1.113.2.1 2004/07/08 22:58:11 weiden Exp $
</pre><pre class="diff" id="context"> ;
 ; ReactOS Operating System
 ;
</pre><pre class="diff"><small id="info">@@ -354,6 +354,8 @@
</small></pre><pre class="diff" id="context"> RtlCreateRegistryKey=RtlCreateRegistryKey@8
 RtlCreateSecurityDescriptor=RtlCreateSecurityDescriptor@8
 ;RtlCreateTagHeap
</pre><pre class="diff" id="added">+RtlCreateTimer=RtlCreateTimer@28
+RtlCreateTimerQueue=RtlCreateTimerQueue@4
</pre><pre class="diff" id="context"> RtlCreateUnicodeString=RtlCreateUnicodeString@8
 RtlCreateUnicodeStringFromAsciiz=RtlCreateUnicodeStringFromAsciiz@8
 RtlCreateUserProcess=RtlCreateUserProcess@40
</pre><pre class="diff"><small id="info">@@ -377,6 +379,9 @@
</small></pre><pre class="diff" id="context"> RtlDeleteRegistryValue=RtlDeleteRegistryValue@12
 RtlDeleteResource=RtlDeleteResource@4
 ;RtlDeleteSecurityObject
</pre><pre class="diff" id="added">+RtlDeleteTimer=RtlDeleteTimer@12
+RtlDeleteTimerQueue=RtlDeleteTimerQueue@4
+RtlDeleteTimerQueueEx=RtlDeleteTimerQueueEx@8
</pre><pre class="diff" id="context"> RtlDestroyAtomTable=RtlDestroyAtomTable@4
 RtlDestroyEnvironment=RtlDestroyEnvironment@4
 RtlDestroyHandleTable=RtlDestroyHandleTable@4
</pre><pre class="diff"><small id="info">@@ -625,6 +630,7 @@
</small></pre><pre class="diff" id="context"> RtlUpcaseUnicodeToCustomCPN=RtlUpcaseUnicodeToCustomCPN@24
 RtlUpcaseUnicodeToMultiByteN=RtlUpcaseUnicodeToMultiByteN@20
 RtlUpcaseUnicodeToOemN=RtlUpcaseUnicodeToOemN@20
</pre><pre class="diff" id="added">+RtlUpdateTimer=RtlUpdateTimer@16
</pre><pre class="diff" id="context"> RtlUpperChar=RtlUpperChar@4
 RtlUpperString=RtlUpperString@8
 ;RtlUsageHeap
</pre></div>
<hr /><a name="file9" /><div class="file">
<span class="pathname"><a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos?only_with_tag=win32k_user_reconstruction">reactos</a>/<a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib?only_with_tag=win32k_user_reconstruction">lib</a>/<a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib/ntdll?only_with_tag=win32k_user_reconstruction">ntdll</a><br /></span>
<div class="fileheader"><big><b>makefile</b></big> <small id="info"><a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib/ntdll/makefile?rev=1.105&amp;content-type=text/x-cvsweb-markup">1.105</a> <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib/ntdll/makefile.diff?r1=text&amp;tr1=1.105&amp;r2=text&amp;tr2=1.105.2.1&amp;f=h">-&gt;</a> <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib/ntdll/makefile?rev=1.105.2.1&amp;content-type=text/x-cvsweb-markup">1.105.2.1</a></small></div>
<pre class="diff"><small id="info">diff -u -r1.105 -r1.105.2.1
--- makefile        3 Jul 2004 17:40:23 -0000        1.105
+++ makefile        8 Jul 2004 22:58:11 -0000        1.105.2.1
@@ -1,4 +1,4 @@
</small></pre><pre class="diff" id="removed">-# $Id: makefile,v 1.105 2004/07/03 17:40:23 navaraf Exp $
</pre><pre class="diff" id="added">+# $Id: makefile,v 1.105.2.1 2004/07/08 22:58:11 weiden Exp $
</pre><pre class="diff" id="context"> 
 PATH_TO_TOP = ../..
 
</pre><pre class="diff"><small id="info">@@ -83,6 +83,7 @@
</small></pre><pre class="diff" id="context">         rtl/resource.o \
         rtl/teb.o \
         rtl/thread.o \
</pre><pre class="diff" id="added">+        rtl/timerqueue.o \
</pre><pre class="diff" id="context">         rtl/libsupp.o
 
 STDIO_OBJECTS = \
</pre></div>
<hr /><a name="file10" /><div class="file">
<span class="pathname"><a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos?only_with_tag=win32k_user_reconstruction">reactos</a>/<a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib?only_with_tag=win32k_user_reconstruction">lib</a>/<a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib/user32?only_with_tag=win32k_user_reconstruction">user32</a>/<a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib/user32/misc?only_with_tag=win32k_user_reconstruction">misc</a><br /></span>
<div class="fileheader"><big><b>misc.c</b></big> <small id="info"><a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib/user32/misc/misc.c?rev=1.5&amp;content-type=text/x-cvsweb-markup">1.5</a> <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib/user32/misc/misc.c.diff?r1=text&amp;tr1=1.5&amp;r2=text&amp;tr2=1.5.8.1&amp;f=h">-&gt;</a> <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib/user32/misc/misc.c?rev=1.5.8.1&amp;content-type=text/x-cvsweb-markup">1.5.8.1</a></small></div>
<pre class="diff"><small id="info">diff -u -r1.5 -r1.5.8.1
--- misc.c        28 May 2004 21:33:41 -0000        1.5
+++ misc.c        8 Jul 2004 22:58:11 -0000        1.5.8.1
@@ -16,7 +16,7 @@
</small></pre><pre class="diff" id="context">  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
</pre><pre class="diff" id="removed">-/* $Id: misc.c,v 1.5 2004/05/28 21:33:41 gvg Exp $
</pre><pre class="diff" id="added">+/* $Id: misc.c,v 1.5.8.1 2004/07/08 22:58:11 weiden Exp $
</pre><pre class="diff" id="context">  *
  * PROJECT:         ReactOS user32.dll
  * FILE:            lib/user32/misc/misc.c
</pre><pre class="diff"><small id="info">@@ -59,17 +59,20 @@
</small></pre><pre class="diff" id="context"> 
 VOID
 STDCALL
</pre><pre class="diff" id="removed">-PrivateCsrssInitialized()
</pre><pre class="diff" id="added">+PrivateCsrssInitialized(<span id="addedchars">VOID</span>)
</pre><pre class="diff" id="context"> {
   NtUserCallNoParam(NOPARAM_ROUTINE_CSRSS_INITIALIZED);
 }
 
</pre><pre class="diff" id="added">+
</pre><pre class="diff" id="context"> /*
  * @implemented
  */
 BOOL
 STDCALL
</pre><pre class="diff" id="removed">-RegisterLogonProcess ( HANDLE hprocess, BOOL x )
</pre><pre class="diff" id="added">+RegisterLogonProcess(DWORD dwProcessId, BOOL bRegister)
</pre><pre class="diff" id="context"> {
</pre><pre class="diff" id="removed">-  return NtUserRegisterLogonProcess(hprocess, x);
</pre><pre class="diff" id="added">+  return NtUserCallTwoParam(dwProcessId,
+                            (DWORD)bRegister,
+                            TWOPARAM_ROUTINE_REGISTERLOGONPROC);
</pre><pre class="diff" id="context"> }
</pre></div>
<hr /><a name="file11" /><div class="file">
<span class="pathname"><a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos?only_with_tag=win32k_user_reconstruction">reactos</a>/<a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/subsys?only_with_tag=win32k_user_reconstruction">subsys</a>/<a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/subsys/system?only_with_tag=win32k_user_reconstruction">system</a>/<a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/subsys/system/winlogon?only_with_tag=win32k_user_reconstruction">winlogon</a><br /></span>
<div class="fileheader"><big><b>winlogon.c</b></big> <small id="info"><a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/subsys/system/winlogon/winlogon.c?rev=1.31&amp;content-type=text/x-cvsweb-markup">1.31</a> <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/subsys/system/winlogon/winlogon.c.diff?r1=text&amp;tr1=1.31&amp;r2=text&amp;tr2=1.31.2.1&amp;f=h">-&gt;</a> <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/subsys/system/winlogon/winlogon.c?rev=1.31.2.1&amp;content-type=text/x-cvsweb-markup">1.31.2.1</a></small></div>
<pre class="diff"><small id="info">diff -u -r1.31 -r1.31.2.1
--- winlogon.c        3 Jul 2004 17:40:24 -0000        1.31
+++ winlogon.c        8 Jul 2004 22:58:11 -0000        1.31.2.1
@@ -1,4 +1,4 @@
</small></pre><pre class="diff" id="removed">-/* $Id: winlogon.c,v 1.31 2004/07/03 17:40:24 navaraf Exp $
</pre><pre class="diff" id="added">+/* $Id: winlogon.c,v 1.31.2.1 2004/07/08 22:58:11 weiden Exp $
</pre><pre class="diff" id="context">  * 
  * COPYRIGHT:       See COPYING in the top level directory
  * PROJECT:         ReactOS kernel
</pre><pre class="diff"><small id="info">@@ -565,7 +565,7 @@
</small></pre><pre class="diff" id="context">   }
   
   WLSession-&gt;LogonStatus = LOGON_INITIALIZING;
</pre><pre class="diff" id="removed">-#if START_LSASS
</pre><pre class="diff" id="added">+
</pre><pre class="diff" id="context">   if(!RegisterLogonProcess(GetCurrentProcessId(), TRUE))
   {
     DbgPrint("WL: Could not register logon process\n");
</pre><pre class="diff"><small id="info">@@ -573,7 +573,6 @@
</small></pre><pre class="diff" id="context">     ExitProcess(0);
     return 0;
   }
</pre><pre class="diff" id="removed">-#endif
</pre><pre class="diff" id="context">   
   if(!WlxCreateWindowStationAndDesktops(WLSession))
   {
</pre></div>
<hr /><a name="file12" /><div class="file">
<span class="pathname"><a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos?only_with_tag=win32k_user_reconstruction">reactos</a>/<a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/subsys?only_with_tag=win32k_user_reconstruction">subsys</a>/<a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/subsys/win32k?only_with_tag=win32k_user_reconstruction">win32k</a>/<a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/subsys/win32k/include?only_with_tag=win32k_user_reconstruction">include</a><br /></span>
<div class="fileheader"><big><b>internal.h</b></big> <small id="info"><a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/subsys/win32k/include/internal.h?rev=1.1.2.1&amp;content-type=text/x-cvsweb-markup">1.1.2.1</a> <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/subsys/win32k/include/internal.h.diff?r1=text&amp;tr1=1.1.2.1&amp;r2=text&amp;tr2=1.1.2.2&amp;f=h">-&gt;</a> <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/subsys/win32k/include/internal.h?rev=1.1.2.2&amp;content-type=text/x-cvsweb-markup">1.1.2.2</a></small></div>
<pre class="diff"><small id="info">diff -u -r1.1.2.1 -r1.1.2.2
--- internal.h        7 Jul 2004 18:14:43 -0000        1.1.2.1
+++ internal.h        8 Jul 2004 22:58:12 -0000        1.1.2.2
@@ -1000,6 +1000,7 @@
</small></pre><pre class="diff" id="context"> 
 INT   FASTCALL IntGetSystemMetrics(INT nIndex);
 BOOL  FASTCALL IntSystemParametersInfo(UINT uiAction, UINT uiParam, PVOID pvParam, UINT fWinIni);
</pre><pre class="diff" id="added">+BOOL  FASTCALL IntRegisterLogonProcess(DWORD dwProcessId, BOOL bRegister);
</pre><pre class="diff" id="context"> void           W32kRegisterPrimitiveMessageQueue();
 
 #endif /* _NTUSER_H */
</pre></div>
<hr /><a name="file13" /><div class="file">
<span class="pathname"><a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos?only_with_tag=win32k_user_reconstruction">reactos</a>/<a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/subsys?only_with_tag=win32k_user_reconstruction">subsys</a>/<a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/subsys/win32k?only_with_tag=win32k_user_reconstruction">win32k</a>/<a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/subsys/win32k/ntuser?only_with_tag=win32k_user_reconstruction">ntuser</a><br /></span>
<div class="fileheader"><big><b>misc.c</b></big> <small id="info"><a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/subsys/win32k/ntuser/misc.c?rev=1.81.2.1&amp;content-type=text/x-cvsweb-markup">1.81.2.1</a> <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/subsys/win32k/ntuser/misc.c.diff?r1=text&amp;tr1=1.81.2.1&amp;r2=text&amp;tr2=1.81.2.2&amp;f=h">-&gt;</a> <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/subsys/win32k/ntuser/misc.c?rev=1.81.2.2&amp;content-type=text/x-cvsweb-markup">1.81.2.2</a></small></div>
<pre class="diff"><small id="info">diff -u -r1.81.2.1 -r1.81.2.2
--- misc.c        7 Jul 2004 18:03:01 -0000        1.81.2.1
+++ misc.c        8 Jul 2004 22:58:12 -0000        1.81.2.2
@@ -1,4 +1,4 @@
</small></pre><pre class="diff" id="removed">-/* $Id: misc.c,v 1.81.2.1 2004/07/07 18:03:01 weiden Exp $
</pre><pre class="diff" id="added">+/* $Id: misc.c,v 1.81.2.2 2004/07/08 22:58:12 weiden Exp $
</pre><pre class="diff" id="context">  *
  * COPYRIGHT:        See COPYING in the top level directory
  * PROJECT:          ReactOS kernel
</pre><pre class="diff"><small id="info">@@ -38,39 +38,44 @@
</small></pre><pre class="diff" id="context"> }
 
 BOOL FASTCALL
</pre><pre class="diff" id="removed">-IntRegisterLogonProcess(HANDLE hProcess, BOOL x)
</pre><pre class="diff" id="added">+IntRegisterLogonProcess(DWORD dwProcessId, BOOL bRegister)
</pre><pre class="diff" id="context"> {
   PEPROCESS Process;
   NTSTATUS Status;
</pre><pre class="diff" id="removed">-  
-  if(LogonProcess != NULL &amp;&amp; LogonProcess != PsGetWin32Process())
</pre><pre class="diff" id="added">+
+  Status = PsLookupProcessByProcessId((PVOID)dwProcessId,
+                                      &amp;Process);
+  if (!NT_SUCCESS(Status))
</pre><pre class="diff" id="context">   {
</pre><pre class="diff" id="removed">-    SetLastWin32Error(ERROR_ACCESS_DENIED);
</pre><pre class="diff" id="added">+    SetLastWin32Error(RtlNtStatusToDosError(Status));
</pre><pre class="diff" id="context">     return FALSE;
   }
</pre><pre class="diff" id="removed">-  
-  if(hProcess)
</pre><pre class="diff" id="added">+
+  if (bRegister)
</pre><pre class="diff" id="context">   {
</pre><pre class="diff" id="removed">-    Status = ObReferenceObjectByHandle(hProcess,
-                                       PROCESS_QUERY_INFORMATION,
-                                       PsProcessType,
-                                       ExGetPreviousMode(),
-                                       (PVOID*)&amp;Process,
-                                       NULL);
-    if(!NT_SUCCESS(Status))
</pre><pre class="diff" id="added">+    /* Register the logon process */
+    if (LogonProcess != NULL)
</pre><pre class="diff" id="context">     {
</pre><pre class="diff" id="removed">-      SetLastNtError(Status);
-      return 0;
</pre><pre class="diff" id="added">+      ObDereferenceObject(Process);
+      return FALSE;
</pre><pre class="diff" id="context">     }
</pre><pre class="diff" id="removed">-  
</pre><pre class="diff" id="added">+
</pre><pre class="diff" id="context">     LogonProcess = Process-&gt;Win32Process;
</pre><pre class="diff" id="removed">-    ObDereferenceObject(Process);
</pre><pre class="diff" id="context">   }
   else
   {
</pre><pre class="diff" id="removed">-    /* <span id="removedchars">d</span>eregister the logon process */
</pre><pre class="diff" id="added">+    /* <span id="addedchars">D</span>eregister the logon process */
+    if (LogonProcess != Process-&gt;Win32Process)
+    {
+      ObDereferenceObject(Process);
+      return FALSE;
+    }
+
</pre><pre class="diff" id="context">     LogonProcess = NULL;
   }
</pre><pre class="diff" id="added">+
+  ObDereferenceObject(Process);
+
</pre><pre class="diff" id="context">   return TRUE;
 }
 
</pre></div>
<hr /><a name="file14" /><div class="file">
<span class="pathname"><a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos?only_with_tag=win32k_user_reconstruction">reactos</a>/<a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/w32api?only_with_tag=win32k_user_reconstruction">w32api</a>/<a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/w32api/include?only_with_tag=win32k_user_reconstruction">include</a><br /></span>
<div class="fileheader"><big><b>winuser.h</b></big> <small id="info"><a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/w32api/include/winuser.h?rev=1.7&amp;content-type=text/x-cvsweb-markup">1.7</a> <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/w32api/include/winuser.h.diff?r1=text&amp;tr1=1.7&amp;r2=text&amp;tr2=1.7.2.1&amp;f=h">-&gt;</a> <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/w32api/include/winuser.h?rev=1.7.2.1&amp;content-type=text/x-cvsweb-markup">1.7.2.1</a></small></div>
<pre class="diff"><small id="info">diff -u -r1.7 -r1.7.2.1
--- winuser.h        24 Jun 2004 09:44:06 -0000        1.7
+++ winuser.h        8 Jul 2004 22:58:12 -0000        1.7.2.1
@@ -3704,6 +3704,7 @@
</small></pre><pre class="diff" id="context"> HDEVNOTIFY WINAPI RegisterDeviceNotificationW(HANDLE,LPVOID,DWORD);
 #endif
 BOOL WINAPI RegisterHotKey(HWND,int,UINT,UINT);
</pre><pre class="diff" id="added">+BOOL WINAPI RegisterLogonProcess(DWORD,BOOL);
</pre><pre class="diff" id="context"> #if (_WIN32_WINNT &gt;= 0x0501)
 BOOL WINAPI RegisterRawInputDevices(PCRAWINPUTDEVICE,UINT,UINT);
 #endif
</pre></div>
<hr /><a name="file15" /><div class="file">
<span class="pathname" id="added"><a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos?only_with_tag=win32k_user_reconstruction">reactos</a>/<a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/apps?only_with_tag=win32k_user_reconstruction">apps</a>/<a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/apps/tests?only_with_tag=win32k_user_reconstruction">tests</a>/<a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/apps/tests/thrdheap?only_with_tag=win32k_user_reconstruction">thrdheap</a><br /></span>
<div class="fileheader" id="added"><big><b>.cvsignore</b></big> <small id="info">added at <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/apps/tests/thrdheap/.cvsignore?rev=1.1.2.1&amp;content-type=text/x-cvsweb-markup">1.1.2.1</a></small></div>
<pre class="diff"><small id="info">diff -N .cvsignore
--- /dev/null        1 Jan 1970 00:00:00 -0000
+++ .cvsignore        8 Jul 2004 22:58:12 -0000        1.1.2.1
@@ -0,0 +1,6 @@
</small></pre><pre class="diff" id="added">+*.o
+*.d
+*.exe
+*.coff
+*.sym
+*.map
</pre></div>
<hr /><a name="file16" /><div class="file">
<span class="pathname" id="added"><a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos?only_with_tag=win32k_user_reconstruction">reactos</a>/<a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/apps?only_with_tag=win32k_user_reconstruction">apps</a>/<a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/apps/tests?only_with_tag=win32k_user_reconstruction">tests</a>/<a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/apps/tests/thrdheap?only_with_tag=win32k_user_reconstruction">thrdheap</a><br /></span>
<div class="fileheader" id="added"><big><b>makefile</b></big> <small id="info">added at <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/apps/tests/thrdheap/makefile?rev=1.1.2.1&amp;content-type=text/x-cvsweb-markup">1.1.2.1</a></small></div>
<pre class="diff"><small id="info">diff -N makefile
--- /dev/null        1 Jan 1970 00:00:00 -0000
+++ makefile        8 Jul 2004 22:58:12 -0000        1.1.2.1
@@ -0,0 +1,21 @@
</small></pre><pre class="diff" id="added">+# $Id: makefile,v 1.1.2.1 2004/07/08 22:58:12 weiden Exp $
+
+PATH_TO_TOP = ../../..
+
+TARGET_NORC = yes
+
+TARGET_TYPE = program
+
+TARGET_APPTYPE = console
+
+TARGET_NAME = thrdheap
+
+TARGET_OBJECTS = $(TARGET_NAME).o
+
+TARGET_CFLAGS = -Wall -Werror
+
+include $(PATH_TO_TOP)/rules.mak
+
+include $(TOOLS_PATH)/helper.mk
+
+# EOF
</pre></div>
<hr /><a name="file17" /><div class="file">
<span class="pathname" id="added"><a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos?only_with_tag=win32k_user_reconstruction">reactos</a>/<a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/apps?only_with_tag=win32k_user_reconstruction">apps</a>/<a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/apps/tests?only_with_tag=win32k_user_reconstruction">tests</a>/<a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/apps/tests/thrdheap?only_with_tag=win32k_user_reconstruction">thrdheap</a><br /></span>
<div class="fileheader" id="added"><big><b>thrdheap.c</b></big> <small id="info">added at <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/apps/tests/thrdheap/thrdheap.c?rev=1.1.2.1&amp;content-type=text/x-cvsweb-markup">1.1.2.1</a></small></div>
<pre class="diff"><small id="info">diff -N thrdheap.c
--- /dev/null        1 Jan 1970 00:00:00 -0000
+++ thrdheap.c        8 Jul 2004 22:58:12 -0000        1.1.2.1
@@ -0,0 +1,115 @@
</small></pre><pre class="diff" id="added">+#include &lt;windows.h&gt;
+#include &lt;stdio.h&gt;

+#define MAX_THREADS        10
+#define STAT_PRINT_INTERVAL        250

+typedef struct _THREADDATA
+{
+  DWORD id;
+  HANDLE hThread;
+  struct _THREADDATA **entry;
+} THREADDATA, *PTHREADDATA;

+static CRITICAL_SECTION LockThreadList;
+static PTHREADDATA ThreadList[MAX_THREADS];
+static LONG ThreadsCount = 0;
+static ULONG ThreadsCreatedCount = 0;

+DWORD WINAPI
+TestThread(PTHREADDATA ThreadData)
+{
+  EnterCriticalSection(&amp;LockThreadList);
+  *(ThreadData-&gt;entry) = NULL;
+  LeaveCriticalSection(&amp;LockThreadList);

+  InterlockedDecrement(&amp;ThreadsCount);
+  CloseHandle(ThreadData-&gt;hThread);
+  HeapFree(GetProcessHeap(), 0, ThreadData);
+  return 0;
+}

+BOOL CreateThreads(VOID)
+{
+  int x;
+  PTHREADDATA td;

+  if(ThreadsCount &gt;= MAX_THREADS)
+  {
+    return FALSE;
+  }

+  for(x = 0; x &lt; MAX_THREADS; x++)
+  {
+    if(ThreadList[x] == 0)
+    {
+      if(!(td = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(THREADDATA))))
+      {
+        printf("Unable to allocate memory for a THREADDATA structure!\n");
+        return FALSE;
+      }

+      td-&gt;entry = &amp;ThreadList[x];

+      if(!(td-&gt;hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)TestThread,
+                                      td, 0, &amp;td-&gt;id)))
+      {
+        printf("Failed to create a thread\n");

+        /* free the memory, we couldn't find a free slot for the thread */
+        HeapFree(GetProcessHeap(), 0, td);
+        return FALSE;
+      }
+      InterlockedIncrement(&amp;ThreadsCount);

+      ThreadList[x] = td;

+      /* close the handles later */
+      return TRUE;
+    }
+  }

+  return FALSE;
+}

+int main(int argc, char* argv[])
+{  
+  HANDLE Handles[MAX_THREADS];
+  int x, n;
+  BOOL PrintInfo;

+  InitializeCriticalSection(&amp;LockThreadList);
+  ZeroMemory(ThreadList, MAX_THREADS * sizeof(PTHREADDATA));
+  
+  printf("ReactOS Heap/Thread Stress-Test\nType Ctrl+C to stop the infinite test\n\n");

+  for(;;)
+  {
+    PrintInfo = FALSE;
+    
+    EnterCriticalSection(&amp;LockThreadList);
+    while(CreateThreads())
+    {
+      if(++ThreadsCreatedCount % STAT_PRINT_INTERVAL == 0)
+      {
+        PrintInfo = TRUE;
+      }
+    }

+    /* build a list of handles */
+    n = 0;
+    for(x = 0; x &lt; MAX_THREADS; x++)
+    {
+      if(ThreadList[x] != NULL)
+        Handles[n++] = ThreadList[x]-&gt;hThread;
+    }

+    LeaveCriticalSection(&amp;LockThreadList);
+    WaitForMultipleObjects(MAX_THREADS, Handles, FALSE, INFINITE);
+    if(PrintInfo)
+    {
+      printf("Created %d threads\r", (int)ThreadsCreatedCount);
+    }
+  }
+}
+
</pre></div>
<hr /><a name="file18" /><div class="file">
<span class="pathname" id="added"><a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos?only_with_tag=win32k_user_reconstruction">reactos</a>/<a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib?only_with_tag=win32k_user_reconstruction">lib</a>/<a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib/ntdll?only_with_tag=win32k_user_reconstruction">ntdll</a>/<a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib/ntdll/rtl?only_with_tag=win32k_user_reconstruction">rtl</a><br /></span>
<div class="fileheader" id="added"><big><b>timerqueue.c</b></big> <small id="info">added at <a href="http://cvs.reactos.com/cgi-bin/cvsweb/reactos/lib/ntdll/rtl/timerqueue.c?rev=1.2.2.1&amp;content-type=text/x-cvsweb-markup">1.2.2.1</a></small></div>
<pre class="diff"><small id="info">diff -N timerqueue.c
--- /dev/null        1 Jan 1970 00:00:00 -0000
+++ timerqueue.c        8 Jul 2004 22:58:12 -0000        1.2.2.1
@@ -0,0 +1,119 @@
</small></pre><pre class="diff" id="added">+/*
+ *  ReactOS kernel
+ *  Copyright (C) 2004 ReactOS Team
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+/* $Id: timerqueue.c,v 1.2.2.1 2004/07/08 22:58:12 weiden Exp $
+ *
+ * COPYRIGHT:         See COPYING in the top level directory
+ * PROJECT:           ReactOS system libraries
+ * PURPOSE:           Timer Queue implementation
+ * FILE:              lib/ntdll/rtl/timerqueue.c
+ */
+
+/* INCLUDES ****************************************************************/
+
+#include &lt;ddk/ntddk.h&gt;
+
+#define NDEBUG
+#include &lt;ntdll/ntdll.h&gt;
+
+typedef VOID (CALLBACK *WAITORTIMERCALLBACKFUNC) (PVOID, BOOLEAN );
+
+/*
+ * @unimplemented
+ */
+NTSTATUS
+STDCALL
+RtlCreateTimer(HANDLE TimerQueue,
+               PHANDLE phNewTimer,
+               WAITORTIMERCALLBACKFUNC Callback,
+               PVOID Parameter,
+               DWORD DueTime,
+               DWORD Period,
+               ULONG Flags)
+{
+  DPRINT1("RtlCreateTimer: stub\n");
+  return STATUS_NOT_IMPLEMENTED;
+}
+
+
+/*
+ * @unimplemented
+ */
+NTSTATUS
+STDCALL
+RtlCreateTimerQueue(PHANDLE TimerQueue)
+{
+  DPRINT1("RtlCreateTimerQueue: stub\n");
+  return STATUS_NOT_IMPLEMENTED;
+}
+
+
+/*
+ * @unimplemented
+ */
+NTSTATUS
+STDCALL
+RtlDeleteTimer(HANDLE TimerQueue,
+               HANDLE Timer,
+               HANDLE CompletionEvent)
+{
+  DPRINT1("RtlDeleteTimer: stub\n");
+  return STATUS_NOT_IMPLEMENTED;
+}
+
+
+/*
+ * @unimplemented
+ */
+NTSTATUS
+STDCALL
+RtlDeleteTimerQueue(HANDLE TimerQueue)
+{
+  DPRINT1("RtlDeleteTimerQueue: stub\n");
+  return STATUS_NOT_IMPLEMENTED;
+}
+
+
+/*
+ * @unimplemented
+ */
+NTSTATUS
+STDCALL
+RtlDeleteTimerQueueEx(HANDLE TimerQueue,
+                      HANDLE CompletionEvent)
+{
+  DPRINT1("RtlDeleteTimerQueueEx: stub\n");
+  return STATUS_NOT_IMPLEMENTED;
+}
+
+
+/*
+ * @unimplemented
+ */
+NTSTATUS
+STDCALL
+RtlUpdateTimer(HANDLE TimerQueue,
+               HANDLE Timer,
+               ULONG DueTime,
+               ULONG Period)
+{
+  DPRINT1("RtlUpdateTimer: stub\n");
+  return STATUS_NOT_IMPLEMENTED;
+}
+
+/* EOF */
</pre></div>
<center><small><a href="http://www.badgers-in-foil.co.uk/projects/cvsspam/" title="commit -&gt; email">CVSspam</a> 0.2.8</small></center>
</body></html>