[ros-diffs] [ion] 13793: Fix bugcheck code and make debugging easier for unhandled exceptions/spinlocks. fixg a race condition with tab+b, fix irql to be high_level, fix calling unsafe function by caching bugcode data, fix support for smp by using IPI, fix not-breakpointing when no debugger is there, implement KeBugCheck callbacks with Reason, fix callbacks not being called, fix proper breakpoint during bugcheck, fix errenous assert, merge with 13774.

ion at svn.reactos.com ion at svn.reactos.com
Wed Mar 2 03:55:18 CET 2005


Fix bugcheck code and make debugging easier for unhandled
exceptions/spinlocks. fixg a race condition with tab+b, fix irql to be
high_level, fix calling unsafe function by caching bugcode data, fix
support for smp by using IPI, fix not-breakpointing when no debugger is
there, implement KeBugCheck callbacks with Reason, fix callbacks not
being called, fix proper breakpoint during bugcheck, fix errenous
assert, merge with 13774.
Modified: branches/alex_devel_branch/reactos/Makefile
Modified:
branches/alex_devel_branch/reactos/boot/freeldr/bootsect/Makefile
Modified:
branches/alex_devel_branch/reactos/boot/freeldr/fdebug/Makefile
Modified:
branches/alex_devel_branch/reactos/boot/freeldr/freeldr/Makefile
Modified:
branches/alex_devel_branch/reactos/boot/freeldr/install/Makefile
Modified: branches/alex_devel_branch/reactos/boot/freeldr/tools/Makefile
Modified: branches/alex_devel_branch/reactos/bootdata/hivesys.inf
Modified:
branches/alex_devel_branch/reactos/bootdata/packages/reactos.dff
Modified:
branches/alex_devel_branch/reactos/drivers/video/videoprt/videoprt.c
Modified:
branches/alex_devel_branch/reactos/hal/halx86/generic/display.c
Modified: branches/alex_devel_branch/reactos/include/ddk/fsfuncs.h
Modified: branches/alex_devel_branch/reactos/include/ntos/zwtypes.h
Modified: branches/alex_devel_branch/reactos/lib/cpl/desk/de.rc
Modified: branches/alex_devel_branch/reactos/lib/crt/conio/ungetch.c
Modified: branches/alex_devel_branch/reactos/lib/crt/makefile
Modified: branches/alex_devel_branch/reactos/lib/crt/stdio/fopen.c
Modified: branches/alex_devel_branch/reactos/lib/crt/stdio/fprintf.c
Added: branches/alex_devel_branch/reactos/lib/crt/stdio/fwprintf.c
Added: branches/alex_devel_branch/reactos/lib/crt/stdio/wfopen.c
Modified: branches/alex_devel_branch/reactos/ntoskrnl/ex/init.c
Modified: branches/alex_devel_branch/reactos/ntoskrnl/ex/sysinfo.c
Modified: branches/alex_devel_branch/reactos/ntoskrnl/fs/notify.c
Modified:
branches/alex_devel_branch/reactos/ntoskrnl/include/internal/ifs.h
Modified:
branches/alex_devel_branch/reactos/ntoskrnl/include/internal/ke.h
Modified: branches/alex_devel_branch/reactos/ntoskrnl/io/iomgr.c
Modified: branches/alex_devel_branch/reactos/ntoskrnl/kd/kdebug.c
Modified: branches/alex_devel_branch/reactos/ntoskrnl/ke/apc.c
Modified: branches/alex_devel_branch/reactos/ntoskrnl/ke/bug.c
Modified: branches/alex_devel_branch/reactos/ntoskrnl/ke/catch.c
Modified: branches/alex_devel_branch/reactos/ntoskrnl/ke/i386/brkpoint.c
Modified: branches/alex_devel_branch/reactos/ntoskrnl/ke/i386/kernel.c
Modified: branches/alex_devel_branch/reactos/ntoskrnl/ke/spinlock.c
Modified: branches/alex_devel_branch/reactos/ntoskrnl/ke/wait.c
Modified: branches/alex_devel_branch/reactos/ntoskrnl/ntoskrnl.mc
Modified: branches/alex_devel_branch/reactos/ntoskrnl/ob/handle.c
Deleted: branches/alex_devel_branch/reactos/subsys/system/regedt32/
Added: branches/alex_devel_branch/reactos/subsys/system/sndvol32/De.rc
Modified:
branches/alex_devel_branch/reactos/subsys/system/sndvol32/sndvol32.rc
Modified: branches/alex_devel_branch/reactos/subsys/system/taskmgr/De.rc
Modified: branches/alex_devel_branch/reactos/subsys/system/vmwinst/De.rc
Modified:
branches/alex_devel_branch/reactos/subsys/system/winlogon/De.rc
  _____  

Modified: branches/alex_devel_branch/reactos/Makefile
--- branches/alex_devel_branch/reactos/Makefile	2005-03-01 22:56:51 UTC
(rev 13792)
+++ branches/alex_devel_branch/reactos/Makefile	2005-03-02 02:55:16 UTC
(rev 13793)
@@ -103,7 +103,7 @@

 
 # System applications
 # autochk cmd format services setup usetup welcome winlogon msiexec 
-SYS_APPS = autochk calc cmd explorer expand format ibrowser msiexec
regedt32 regsvr32 \
+SYS_APPS = autochk calc cmd explorer expand format ibrowser msiexec
regsvr32 \
   reporterror services setup taskmgr userinit usetup welcome vmwinst
rundll32 \
   winlogon regedit winefile notepad reactos lsass
 
  _____  

Modified:
branches/alex_devel_branch/reactos/boot/freeldr/bootsect/Makefile
--- branches/alex_devel_branch/reactos/boot/freeldr/bootsect/Makefile
2005-03-01 22:56:51 UTC (rev 13792)
+++ branches/alex_devel_branch/reactos/boot/freeldr/bootsect/Makefile
2005-03-02 02:55:16 UTC (rev 13793)
@@ -32,26 +32,26 @@

 	@$(MAKE) --no-print-directory -C $(FREELDR_TOOLS_PATH)
 
 dosmbr.bin : dosmbr.asm
-	@echo =====================================================
Assembling dosmbr
+	@echo freeldr: Assembling dosmbr
 	@$(NASM_CMD) $(NFLAGS) -o dosmbr.bin -f bin dosmbr.asm
 
 fat.bin : fat.asm $(BIN2C)
-	@echo =====================================================
Assembling fat
+	@echo freeldr: Assembling fat
 	@$(NASM_CMD) $(NFLAGS) -o fat.bin -f bin fat.asm
 	@$(BIN2C) fat.bin fat.h fat_data
 
 
 fat32.bin : fat32.asm $(BIN2C)
-	@echo =====================================================
Assembling fat32
+	@echo freeldr: Assembling fat32
 	@$(NASM_CMD) $(NFLAGS) -o fat32.bin -f bin fat32.asm
 	@$(BIN2C) fat32.bin fat32.h fat32_data
 
 isoboot.bin : isoboot.asm
-	@echo =====================================================
Assembling isoboot
+	@echo freeldr: Assembling isoboot
 	@$(NASM_CMD) $(NFLAGS) -o isoboot.bin -f bin isoboot.asm
 
 ext2.bin : ext2.asm
-	@echo =====================================================
Assembling ext2
+	@echo freeldr: Assembling ext2
 	@$(NASM_CMD) $(NFLAGS) -o ext2.bin -f bin ext2.asm
 	@$(BIN2C) ext2.bin ext2.h ext2_data
 
@@ -77,4 +77,4 @@
 clean:
 	@-$(RM) *.bin
 	@-$(RM) *.h
-	@echo Clean ALL done.
+	@echo freeldr: Clean ALL done.
  _____  

Modified:
branches/alex_devel_branch/reactos/boot/freeldr/fdebug/Makefile
--- branches/alex_devel_branch/reactos/boot/freeldr/fdebug/Makefile
2005-03-01 22:56:51 UTC (rev 13792)
+++ branches/alex_devel_branch/reactos/boot/freeldr/fdebug/Makefile
2005-03-02 02:55:16 UTC (rev 13793)
@@ -30,23 +30,23 @@

 all: fdebug.exe
 
 fdebug.exe: $(OBJS)
-	@echo =====================================================
LINKING fdebug
+	@echo freeldr: LINKING fdebug
 	$(CC) $(FLAGS) -o fdebug.exe $(OBJS) -lgdi32 -lcomdlg32
-Wl,--subsystem,windows
 
 fdebug.res: fdebug.rc resource.h
-	@echo =====================================================
Compiling $*
+	@echo freeldr: Compiling $*
 	$(RC) -o fdebug.res fdebug.rc -O coff
 
 fdebug.o: fdebug.c rs232.h
-	@echo =====================================================
Compiling $*
+	@echo freeldr: Compiling $*
 	$(CC) $(FLAGS) -o fdebug.o -c fdebug.c
 
 rs232.o: rs232.c rs232.h
-	@echo =====================================================
Compiling $*
+	@echo freeldr: Compiling $*
 	$(CC) $(FLAGS) -o rs232.o -c rs232.c
 
 clean:
 	@-$(RM) *.o
 	@-$(RM) *.res
 	@-$(RM) *.exe
-	@echo Clean ALL done.
+	@echo freeldr: Clean ALL done.
  _____  

Modified:
branches/alex_devel_branch/reactos/boot/freeldr/freeldr/Makefile
--- branches/alex_devel_branch/reactos/boot/freeldr/freeldr/Makefile
2005-03-01 22:56:51 UTC (rev 13792)
+++ branches/alex_devel_branch/reactos/boot/freeldr/freeldr/Makefile
2005-03-02 02:55:16 UTC (rev 13793)
@@ -57,7 +57,7 @@

 	@-$(RM) setupldr.sys
 	@-$(RM) setupldr.map
 	@$(MAKE) --no-print-directory -C $(FREELDR_TOOLS_PATH)
-	@echo Clean ALL done.
+	@echo freeldr: Clean ALL done.
 
 #############################################
 
@@ -259,11 +259,11 @@
 
 
 all : freeldr.sys setupldr.sys
-	@echo Make ALL done.
+	@echo freeldr: Make ALL done.
 
 
 freeldr.sys : $(ALL_OBJS) $(PATH_TO_TOP)/dk/w32/lib/librossym.a
-	@echo =====================================================
LINKING $@
+	@echo freeldr: LINKING $@
 	@$(LD) $(LFLAGS) -o freeldr.exe $(F_OBJS)
$(PATH_TO_TOP)/dk/w32/lib/librossym.a
 ifeq ($(FULL_MAP),yes)
 	@$(OBJDUMP) -d -S freeldr.exe > freeldr.map
@@ -274,7 +274,7 @@
 
 
 setupldr.sys : $(ALL_OBJS)
-	@echo =====================================================
LINKING $@
+	@echo freeldr: LINKING $@
 	@$(LD) $(LFLAGS) -Map setupldr.map -o setupldr.exe $(S_OBJS)
 ifeq ($(FULL_MAP),yes)
 	@$(OBJDUMP) -d -S setupldr.exe > setupldr.map
@@ -285,15 +285,15 @@
 
 
 %.o :: %.c
-	@echo =====================================================
Compiling $*
+	@echo freeldr: Compiling $*
 	@$(CC) $(CFLAGS) -o $@ -c $<
 	@$(DEPTOOL) $*.d
 
 %.o :: %.S
-	@echo =====================================================
Assembling $*
+	@echo freeldr: Assembling $*
 	@$(CC) $(CFLAGS) -o $@ -c $<
 	@$(DEPTOOL) $*.d
 
 %.o :: %.asm
-	@echo =====================================================
Assembling $*
+	@echo freeldr: Assembling $*
 	@$(NASM_CMD) $(NASMFLAGS) -o $@ $<
  _____  

Modified:
branches/alex_devel_branch/reactos/boot/freeldr/install/Makefile
--- branches/alex_devel_branch/reactos/boot/freeldr/install/Makefile
2005-03-01 22:56:51 UTC (rev 13792)
+++ branches/alex_devel_branch/reactos/boot/freeldr/install/Makefile
2005-03-02 02:55:16 UTC (rev 13793)
@@ -35,18 +35,18 @@

 	@$(MAKE) --no-print-directory -C ../bootsect
 
 install.exe: $(OBJS)
-	@echo =====================================================
LINKING install
+	@echo freeldr: LINKING install
 	$(CC) $(FLAGS) -o install.exe $(OBJS)
 
 install.o: install.c install.h volume.h
-	@echo =====================================================
Compiling $*
+	@echo freeldr: Compiling $*
 	$(CC) $(FLAGS) -o install.o -c install.c
 
 volume.o: volume.c volume.h install.h
-	@echo =====================================================
Compiling $*
+	@echo freeldr: Compiling $*
 	$(CC) $(FLAGS) -o volume.o -c volume.c
 
 clean:
 	@-$(RM) *.o
 	@-$(RM) *.exe
-	@echo Clean ALL done.
+	@echo freeldr: Clean ALL done.
  _____  

Modified: branches/alex_devel_branch/reactos/boot/freeldr/tools/Makefile
--- branches/alex_devel_branch/reactos/boot/freeldr/tools/Makefile
2005-03-01 22:56:51 UTC (rev 13792)
+++ branches/alex_devel_branch/reactos/boot/freeldr/tools/Makefile
2005-03-02 02:55:16 UTC (rev 13793)
@@ -25,16 +25,16 @@

 			bin2c$(EXE_POSTFIX)
 
 all : $(TOOLS)
-	@echo Tools are up to date.
+	@echo freeldr: Tools are up to date.
 
 % :: all
 
 %$(EXE_POSTFIX): %.c
-	@echo =====================================================
Compiling $*
+	@echo freeldr: Compiling $*
 	@$(HOST_CC) -Wall -O3 -o $@ $<
 
 
 .PHONY : clean
 clean:
 	@-$(RM) $(TOOLS)
-	@echo Clean ALL done.
+	@echo freeldr: Clean ALL done.
  _____  

Modified: branches/alex_devel_branch/reactos/bootdata/hivesys.inf
--- branches/alex_devel_branch/reactos/bootdata/hivesys.inf
2005-03-01 22:56:51 UTC (rev 13792)
+++ branches/alex_devel_branch/reactos/bootdata/hivesys.inf
2005-03-02 02:55:16 UTC (rev 13793)
@@ -257,10 +257,10 @@

 ; Subsystems
 HKLM,"SYSTEM\CurrentControlSet\Control\Session
Manager\Subsystems","Debug",0x00020000,""
 HKLM,"SYSTEM\CurrentControlSet\Control\Session
Manager\Subsystems","Kmode",0x00020000,"%SystemRoot%\system32\win32k.sys
"
-HKLM,"SYSTEM\CurrentControlSet\Control\Session
Manager\Subsystems","Optional",0x00070000,"Posix Os2"
+HKLM,"SYSTEM\CurrentControlSet\Control\Session
Manager\Subsystems","Optional",0x00070001,50,00,6f,00,73,00,69,00,78,00,
00,00,4f,00,73,00,32,00,00,00,00,00
 HKLM,"SYSTEM\CurrentControlSet\Control\Session
Manager\Subsystems","Os2",0x00020000,"%SystemRoot%\system32\os2ss.exe"
 HKLM,"SYSTEM\CurrentControlSet\Control\Session
Manager\Subsystems","Posix",0x00020000,"%SystemRoot%\system32\psxss.exe"
-HKLM,"SYSTEM\CurrentControlSet\Control\Session
Manager\Subsystems","Required",0x00070000,"Debug Windows"
+HKLM,"SYSTEM\CurrentControlSet\Control\Session
Manager\Subsystems","Required",0x00070001,44,00,65,00,62,00,75,00,67,00,
00,00,57,00,69,00,6e,00,64,00,6f,00,77,00,73,00,00,00,00,00
 HKLM,"SYSTEM\CurrentControlSet\Control\Session
Manager\Subsystems","Windows",0x00020000,"%SystemRoot%\system32\csrss.ex
e"
 
 ; 3Com 3c905 Driver
  _____  

Modified:
branches/alex_devel_branch/reactos/bootdata/packages/reactos.dff
--- branches/alex_devel_branch/reactos/bootdata/packages/reactos.dff
2005-03-01 22:56:51 UTC (rev 13792)
+++ branches/alex_devel_branch/reactos/bootdata/packages/reactos.dff
2005-03-02 02:55:16 UTC (rev 13793)
@@ -149,7 +149,6 @@

 subsys\system\format\format.exe         1
 subsys\system\notepad\notepad.exe       1
 subsys\system\regedit\regedit.exe       4
-subsys\system\regedt32\regedt32.exe     1
 subsys\system\regsvr32\regsvr32.exe     1
 subsys\system\reporterror\reporterror.exe 1
 subsys\system\rundll32\rundll32.exe     1
  _____  

Modified:
branches/alex_devel_branch/reactos/drivers/video/videoprt/videoprt.c
--- branches/alex_devel_branch/reactos/drivers/video/videoprt/videoprt.c
2005-03-01 22:56:51 UTC (rev 13792)
+++ branches/alex_devel_branch/reactos/drivers/video/videoprt/videoprt.c
2005-03-02 02:55:16 UTC (rev 13793)
@@ -492,7 +492,7 @@

 
 VOID FASTCALL 
 IntAttachToCSRSS(PEPROCESS *CallingProcess, PEPROCESS
*PrevAttachedProcess) 
-{ 
+{    
    *CallingProcess = PsGetCurrentProcess(); 
    if (*CallingProcess != Csrss) 
    { 
  _____  

Modified:
branches/alex_devel_branch/reactos/hal/halx86/generic/display.c
--- branches/alex_devel_branch/reactos/hal/halx86/generic/display.c
2005-03-01 22:56:51 UTC (rev 13792)
+++ branches/alex_devel_branch/reactos/hal/halx86/generic/display.c
2005-03-02 02:55:16 UTC (rev 13793)
@@ -502,7 +502,7 @@

       HalWriteGc(0x05, 0x00); /* Write mode 0; read mode 0. */
       HalWriteGc(0x06, 0x05); /* Set graphics. */
       memcpy(GraphVideoBuffer, SavedTextFont[i], FONT_AMOUNT);
-    }
+  }
 
   HalBlankScreen(TRUE);
 
@@ -519,6 +519,7 @@
   HalWriteSeq(0x04, Seq4);
 }
 
+
 VOID STATIC
 HalRestoreMode(VOID)
 {
@@ -628,7 +629,6 @@
     }
 }
 
-
 /* PUBLIC FUNCTIONS
*********************************************************/
 
 VOID STDCALL
@@ -637,6 +637,7 @@
  * FUNCTION: Release ownership of display back to HAL
  */
 {
+
   if (HalResetDisplayParameters == NULL)
     return;
 
@@ -645,12 +646,14 @@
 
   if (!HalResetDisplayParameters(SizeX, SizeY))
     {
+
       HalRestoreMode();
       HalRestoreFont();
-      HalRestorePalette();
+      HalRestorePalette();                
     }
   HalOwnsDisplay = TRUE;
   HalClearDisplay(CHAR_ATTRIBUTE);
+
 }
 
 
  _____  

Modified: branches/alex_devel_branch/reactos/include/ddk/fsfuncs.h
--- branches/alex_devel_branch/reactos/include/ddk/fsfuncs.h
2005-03-01 22:56:51 UTC (rev 13792)
+++ branches/alex_devel_branch/reactos/include/ddk/fsfuncs.h
2005-03-02 02:55:16 UTC (rev 13793)
@@ -617,7 +617,7 @@

 	);
 
 VOID STDCALL
-FsRtlNotifyInitializeSync(IN OUT PNOTIFY_SYNC NotifySync);
+FsRtlNotifyInitializeSync(IN OUT PNOTIFY_SYNC *NotifySync);
 
 NTSTATUS STDCALL
 FsRtlNotifyVolumeEvent(IN PFILE_OBJECT FileObject,
  _____  

Modified: branches/alex_devel_branch/reactos/include/ntos/zwtypes.h
--- branches/alex_devel_branch/reactos/include/ntos/zwtypes.h
2005-03-01 22:56:51 UTC (rev 13792)
+++ branches/alex_devel_branch/reactos/include/ntos/zwtypes.h
2005-03-02 02:55:16 UTC (rev 13793)
@@ -1102,10 +1102,11 @@

 */
 
 typedef struct _FILE_NOTIFY_INFORMATION {
-	ULONG Action;
-	ULONG FileNameLength;
-	WCHAR FileName[0]; 
-} FILE_NOTIFY_INFORMATION;
+   ULONG NextEntryOffset;
+   ULONG Action;
+   ULONG NameLength;
+   WCHAR Name[1];
+} FILE_NOTIFY_INFORMATION, *PFILE_NOTIFY_INFORMATION;
 
 #define FSCTL_GET_VOLUME_BITMAP			0x9006F
 #define FSCTL_GET_RETRIEVAL_POINTERS		0x90073
  _____  

Modified: branches/alex_devel_branch/reactos/lib/cpl/desk/de.rc
--- branches/alex_devel_branch/reactos/lib/cpl/desk/de.rc
2005-03-01 22:56:51 UTC (rev 13792)
+++ branches/alex_devel_branch/reactos/lib/cpl/desk/de.rc
2005-03-02 02:55:16 UTC (rev 13793)
@@ -49,10 +49,10 @@

 STRINGTABLE
 BEGIN
     IDS_CPLNAME "Anzeige"
-    IDS_CPLDESCRIPTION "Passt die Darstellung des Hintergrundbildes und
des Bildschrimschoners an."
+    IDS_CPLDESCRIPTION "Passt die Darstellung des Hintergrundbildes und
des Bildschirmschoners an."
 
     IDS_NONE "(Keine)"
     IDS_CENTER "Zentriert"
     IDS_STRETCH "Gestreckt"
-    IDS_TILE "Nebeneinnander"
+    IDS_TILE "Nebeneinander"
 END
  _____  

Modified: branches/alex_devel_branch/reactos/lib/crt/conio/ungetch.c
--- branches/alex_devel_branch/reactos/lib/crt/conio/ungetch.c
2005-03-01 22:56:51 UTC (rev 13792)
+++ branches/alex_devel_branch/reactos/lib/crt/conio/ungetch.c
2005-03-02 02:55:16 UTC (rev 13793)
@@ -10,11 +10,12 @@

  *              28/12/98: Created
  */
 
+#include <stdio.h>
 #include <conio.h>
 #include <internal/console.h>
 
-#define EOF -1
 
+
 int char_avail = 0;
 int ungot_char = 0;
 
  _____  

Modified: branches/alex_devel_branch/reactos/lib/crt/makefile
--- branches/alex_devel_branch/reactos/lib/crt/makefile	2005-03-01
22:56:51 UTC (rev 13792)
+++ branches/alex_devel_branch/reactos/lib/crt/makefile	2005-03-02
02:55:16 UTC (rev 13793)
@@ -274,7 +274,9 @@

 	stdio/fileno.o \
 	stdio/flsbuf.o \
 	stdio/fopen.o \
+	stdio/wfopen.o \
 	stdio/fprintf.o \
+	stdio/fwprintf.o \
 	stdio/fputc.o \
 	stdio/fputchar.o \
 	stdio/fputs.o \
  _____  

Modified: branches/alex_devel_branch/reactos/lib/crt/stdio/fopen.c
--- branches/alex_devel_branch/reactos/lib/crt/stdio/fopen.c
2005-03-01 22:56:51 UTC (rev 13792)
+++ branches/alex_devel_branch/reactos/lib/crt/stdio/fopen.c
2005-03-02 02:55:16 UTC (rev 13793)
@@ -30,13 +30,14 @@

 #include <string.h>
 #include <io.h>
 #include <fcntl.h>
+#include <tchar.h>
 #include <internal/file.h>
 
 //might change fopen(file,mode) -> fsopen(file,mode,_SH_DENYNO);
 
 
 
-FILE* fopen(const char *file, const char *mode)
+FILE* _tfopen(const _TCHAR *file, const _TCHAR *mode)
 {
   FILE *f;
   int fd, rw, oflags = 0;
@@ -50,28 +51,28 @@
   if (f == NULL)
     return NULL;
 
-  rw = (strchr(mode, '+') == NULL) ? 0 : 1;
-  if (strchr(mode, 'a'))
+  rw = (_tcschr(mode, '+') == NULL) ? 0 : 1;
+  if (_tcschr(mode, 'a'))
     oflags = O_CREAT | (rw ? O_RDWR : O_WRONLY);
-  if (strchr(mode, 'r'))
+  if (_tcschr(mode, 'r'))
     oflags = rw ? O_RDWR : O_RDONLY;
-  if (strchr(mode, 'w'))
+  if (_tcschr(mode, 'w'))
     oflags = O_TRUNC | O_CREAT | (rw ? O_RDWR : O_WRONLY);
-  if (strchr(mode, 't'))
+  if (_tcschr(mode, 't'))
     oflags |= O_TEXT;
-  else if (strchr(mode, 'b'))
+  else if (_tcschr(mode, 'b'))
     oflags |= O_BINARY;
   else
     oflags |= (_fmode& (O_TEXT|O_BINARY));
 
-  fd = _open(file, oflags, 0);
+  fd = _topen(file, oflags, 0);
   if (fd < 0)
     return NULL;
 
 // msvcrt ensures that writes will end up at the end of file in append
mode
 // we just move the file pointer to the end of file initially
 
-  if (strchr(mode, 'a'))
+  if (_tcschr(mode, 'a'))
     _lseek(fd, 0, SEEK_END);
 
   f->_cnt = 0;
@@ -79,14 +80,14 @@
   f->_bufsiz = 0;
   if (rw)
     f->_flag = _IOREAD | _IOWRT;
-  else if (strchr(mode, 'r'))
+  else if (_tcschr(mode, 'r'))
     f->_flag = _IOREAD;
   else
     f->_flag = _IOWRT;
 
-  if (strchr(mode, 't'))
+  if (_tcschr(mode, 't'))
     f->_flag |= _IOTEXT;
-  else if (strchr(mode, 'b'))
+  else if (_tcschr(mode, 'b'))
     f->_flag |= _IOBINARY;
   else if (_fmode& O_BINARY)
     f->_flag |= _IOBINARY;
@@ -94,64 +95,3 @@
   f->_base = f->_ptr = NULL;
   return f;
 }
-
-/*
- * @implemented
- */
-FILE* _wfopen(const wchar_t *file, const wchar_t *mode)
-{
-  FILE *f;
-  int fd, rw, oflags = 0;
-   
-  if (file == 0)
-    return 0;
-  if (mode == 0)
-    return 0;
-
-  f = __alloc_file();
-  if (f == NULL)
-    return NULL;
-
-  rw = (wcschr(mode, L'+') == NULL) ? 0 : 1;
-  if (wcschr(mode, L'a'))
-    oflags = O_CREAT | (rw ? O_RDWR : O_WRONLY);
-  if (wcschr(mode, L'r'))
-    oflags = rw ? O_RDWR : O_RDONLY;
-  if (wcschr(mode, L'w'))
-    oflags = O_TRUNC | O_CREAT | (rw ? O_RDWR : O_WRONLY);
-  if (wcschr(mode, L't'))
-    oflags |= O_TEXT;
-  else if (wcschr(mode, L'b'))
-    oflags |= O_BINARY;
-  else
-    oflags |= (_fmode& (O_TEXT|O_BINARY));
-
-  fd = _wopen(file, oflags, 0);
-  if (fd < 0)
-    return NULL;
-
-// msvcrt ensures that writes will end up at the end of file in append
mode
-// we just move the file pointer to the end of file initially
-  if (wcschr(mode, 'a'))
-    _lseek(fd, 0, SEEK_END);
-
-  f->_cnt = 0;
-  f->_file = fd;
-  f->_bufsiz = 0;
-  if (rw)
-    f->_flag = _IOREAD | _IOWRT;
-  else if (wcschr(mode, L'r'))
-    f->_flag = _IOREAD;
-  else
-    f->_flag = _IOWRT;
-
-  if (wcschr(mode, L't'))
-    f->_flag |= _IOTEXT;
-  else if (wcschr(mode, L'b'))
-    f->_flag |= _IOBINARY;
-  else if (_fmode& O_BINARY)
-    f->_flag |= _IOBINARY;
-
-  f->_base = f->_ptr = NULL;
-  return f;
-}
  _____  

Modified: branches/alex_devel_branch/reactos/lib/crt/stdio/fprintf.c
--- branches/alex_devel_branch/reactos/lib/crt/stdio/fprintf.c
2005-03-01 22:56:51 UTC (rev 13792)
+++ branches/alex_devel_branch/reactos/lib/crt/stdio/fprintf.c
2005-03-02 02:55:16 UTC (rev 13793)
@@ -1,16 +1,17 @@

 /* Copyright (C) 1994 DJ Delorie, see COPYING.DJ for details */
 #include <stdio.h>
 #include <wchar.h>
+#include <tchar.h>
 #include <internal/file.h>
 
 /*
  * @implemented
  */
 int
-fprintf(register FILE *iop, const char *fmt, ...)
+_ftprintf(register FILE *iop, const _TCHAR *fmt, ...)
 {
   int len;
-  char localbuf[BUFSIZ];
+  _TCHAR localbuf[BUFSIZ];
   va_list a=0;
   
 
@@ -18,38 +19,9 @@
   if (iop->_flag & _IONBF)
   {
     iop->_flag &= ~_IONBF;
-    iop->_ptr = iop->_base = localbuf;
-    iop->_bufsiz = BUFSIZ;
-    len = vfprintf(iop,fmt,a);
-    fflush(iop);
-    iop->_flag |= _IONBF;
-    iop->_base = NULL;
-    iop->_bufsiz = 0;
-    iop->_cnt = 0;
-  }
-  else
-    len = vfprintf(iop, fmt, a);
-  return ferror(iop) ? EOF : len;
-}
-
-/*
- * @implemented
- */
-int
-fwprintf(register FILE *iop, const wchar_t *fmt, ...)
-{
-  int len;
-  wchar_t localbuf[BUFSIZ];
-  va_list a=0;
-  
-
-  va_start( a, fmt ); 
-  if (iop->_flag & _IONBF)
-  {
-    iop->_flag &= ~_IONBF;
     iop->_ptr = iop->_base = (char *)localbuf;
     iop->_bufsiz = BUFSIZ;
-    len = vfwprintf(iop,fmt,a);
+    len = _vftprintf(iop,fmt,a);
     fflush(iop);
     iop->_flag |= _IONBF;
     iop->_base = NULL;
@@ -57,6 +29,6 @@
     iop->_cnt = 0;
   }
   else
-    len = vfwprintf(iop, fmt, a);
-  return ferror(iop) ? EOF : len;
+    len = _vftprintf(iop, fmt, a);
+  return ferror(iop) ? -1 : len;
 }
  _____  

Copied: branches/alex_devel_branch/reactos/lib/crt/stdio/fwprintf.c
(from rev 13792, trunk/reactos/lib/crt/stdio/fwprintf.c)
  _____  

Copied: branches/alex_devel_branch/reactos/lib/crt/stdio/wfopen.c (from
rev 13792, trunk/reactos/lib/crt/stdio/wfopen.c)
  _____  

Modified: branches/alex_devel_branch/reactos/ntoskrnl/ex/init.c
--- branches/alex_devel_branch/reactos/ntoskrnl/ex/init.c
2005-03-01 22:56:51 UTC (rev 13792)
+++ branches/alex_devel_branch/reactos/ntoskrnl/ex/init.c
2005-03-02 02:55:16 UTC (rev 13793)
@@ -25,6 +25,7 @@

 extern ULONG_PTR LastKrnlPhysAddr;
 extern ULONG_PTR LastKernelAddress;
 extern LOADER_MODULE KeLoaderModules[64];
+extern PRTL_MESSAGE_RESOURCE_DATA KiBugCodeMessages;
 
 /* FUNCTIONS
****************************************************************/
 
@@ -119,7 +120,7 @@
                                       &ObjectAttributes);
     
     /* Free the String */
-    RtlFreeUnicodeString (&ArcName);
+    RtlFreeUnicodeString(&ArcName);
     
     /* Check for Success */
     if (!NT_SUCCESS(Status)) {
@@ -373,6 +374,9 @@
     LARGE_INTEGER Timeout;
     HANDLE ProcessHandle;
     HANDLE ThreadHandle;
+    PRTL_MESSAGE_RESOURCE_DATA BugCheckData;
+    LDR_RESOURCE_INFO ResourceInfo;
+    PIMAGE_RESOURCE_DATA_ENTRY ResourceDataEntry;
     NTSTATUS Status;
 
     /* Check if the structures match the ASM offset constants */
@@ -410,6 +414,36 @@
     /* Bring back the IRQL to Passive */
     KeLowerIrql(PASSIVE_LEVEL);
     
+    /* Cache the Bugcheck Message Strings. Prepare the Lookup Data */
+    ResourceInfo.Type = 11;
+    ResourceInfo.Name = 1;
+    ResourceInfo.Language = 9;
+    
+    /* Do the lookup. Note that NTOSKRNL must be the first module! */
+    Status = LdrFindResource_U((PVOID)KeLoaderModules[0].ModStart,
+                               &ResourceInfo,
+                               RESOURCE_DATA_LEVEL,
+                               &ResourceDataEntry);
+    
+    /* Make sure it worked */
+    if (NT_SUCCESS(Status)) {
+        
+        DPRINT1("Found Bugcheck Resource Data!\n");
+        
+        /* Now actually get a pointer to it */
+        Status = LdrAccessResource((PVOID)KeLoaderModules[0].ModStart,
+                                   ResourceDataEntry,
+                                   (PVOID*)&BugCheckData,
+                                   NULL);
+        
+        /* Make sure it worked */
+        if (NT_SUCCESS(Status)) {
+
+            DPRINT1("Got Pointer to Bugcheck Resource Data!\n");
+            KiBugCodeMessages = BugCheckData;
+        }
+    }
+    
     /* Load basic Security for other Managers */
     if (!SeInit1()) KEBUGCHECK(SECURITY_INITIALIZATION_FAILED);
 
  _____  

Modified: branches/alex_devel_branch/reactos/ntoskrnl/ex/sysinfo.c
--- branches/alex_devel_branch/reactos/ntoskrnl/ex/sysinfo.c
2005-03-01 22:56:51 UTC (rev 13792)
+++ branches/alex_devel_branch/reactos/ntoskrnl/ex/sysinfo.c
2005-03-02 02:55:16 UTC (rev 13793)
@@ -825,13 +825,111 @@

 	return (STATUS_NOT_IMPLEMENTED);
 }
 
+
+VOID
+ObpGetNextHandleByProcessCount(PSYSTEM_HANDLE_TABLE_ENTRY_INFO pshi,
+                               PEPROCESS Process,
+                               int Count);
+
 /* Class 16 - Handle Information */
 QSI_DEF(SystemHandleInformation)
 {
-	/* FIXME */
-	DPRINT1("NtQuerySystemInformation - SystemHandleInformation not
implemented\n");
-	return (STATUS_NOT_IMPLEMENTED);
+
+        PSYSTEM_HANDLE_INFORMATION Shi = 
+        	(PSYSTEM_HANDLE_INFORMATION) Buffer;
+
+        DPRINT("NtQuerySystemInformation - SystemHandleInformation\n");
+
+	if (Size < sizeof (SYSTEM_HANDLE_INFORMATION))
+        {
+		* ReqSize = sizeof (SYSTEM_HANDLE_INFORMATION);
+		return (STATUS_INFO_LENGTH_MISMATCH);
+	}
+
+	DPRINT("SystemHandleInformation 1\n");
+
+	PEPROCESS pr, syspr;
+	int curSize, i = 0;
+	ULONG hCount = 0;
+		
+        /* First Calc Size from Count. */
+        syspr = PsGetNextProcess(NULL);
+	pr = syspr;
+
+        do
+	  {
+            hCount = hCount +
ObpGetHandleCountByHandleTable(&pr->HandleTable);
+
+            curSize = sizeof(SYSTEM_HANDLE_INFORMATION)+
+                        (  (sizeof(SYSTEM_HANDLE_TABLE_ENTRY_INFO) *
hCount) - 
+                           (sizeof(SYSTEM_HANDLE_TABLE_ENTRY_INFO) ));
+
+            Shi->NumberOfHandles = hCount;
+
+           if (curSize > Size)
+             {
+               DPRINT1("SystemHandleInformation 2\n");
+               *ReqSize = curSize;
+               if (pr != NULL)
+	         {
+	            ObDereferenceObject(pr);
+	         }
+               return (STATUS_INFO_LENGTH_MISMATCH);
+             }
+
+	    pr = PsGetNextProcess(pr);
+
+	    if ((pr == syspr) || (pr == NULL))
+		break;
+        } while ((pr != syspr) && (pr != NULL));
+
+	if (pr != NULL)
+	  {
+	    ObDereferenceObject(pr);
+	  }
+
+	DPRINT("SystemHandleInformation 3\n");
+
+        /* Now get Handles from all processs. */
+        syspr = PsGetNextProcess(NULL);
+	pr = syspr;
+
+	 do
+	  {
+            int Count = 0, HandleCount = 0;
+
+            HandleCount =
ObpGetHandleCountByHandleTable(&pr->HandleTable);
+
+            for (Count = 0; HandleCount > 0 ; HandleCount--)
+               {
+                 ObpGetNextHandleByProcessCount( &Shi->Handles[i], pr,
Count);
+                 Count++;
+                 i++;
+               }
+
+	    pr = PsGetNextProcess(pr);
+
+	    if ((pr == syspr) || (pr == NULL))
+		break;
+	   } while ((pr != syspr) && (pr != NULL));
+
+
+	if (pr != NULL)
+	  {
+	    ObDereferenceObject(pr);
+	  }
+
+	DPRINT("SystemHandleInformation 4\n");
+	return (STATUS_SUCCESS);
+
 }
+/*
+SSI_DEF(SystemHandleInformation)
+{
+	
+	return (STATUS_SUCCESS);
+}
+*/
 
 /* Class 17 -  Information */
 QSI_DEF(SystemObjectInformation)
  _____  

Modified: branches/alex_devel_branch/reactos/ntoskrnl/fs/notify.c
--- branches/alex_devel_branch/reactos/ntoskrnl/fs/notify.c
2005-03-01 22:56:51 UTC (rev 13792)
+++ branches/alex_devel_branch/reactos/ntoskrnl/fs/notify.c
2005-03-02 02:55:16 UTC (rev 13793)
@@ -5,14 +5,141 @@

  * FILE:            ntoskrnl/fs/notify.c
  * PURPOSE:         No purpose listed.
  *
- * PROGRAMMERS:     No programmer listed.
+ * PROGRAMMERS:     Gunnar Dalsnes
  */
 
 #include <ntoskrnl.h>
-#define NDEBUG
+
+//#define NDEBUG
 #include <internal/debug.h>
 
+
+PAGED_LOOKASIDE_LIST    NotifyEntryLookaside;
+
+#define FSRTL_NOTIFY_TAG TAG('N','O','T','I')
+
+typedef struct _NOTIFY_ENTRY
+{
+   LIST_ENTRY ListEntry;
+   PSTRING FullDirectoryName;
+   BOOLEAN WatchTree;
+   BOOLEAN IgnoreBuffer;
+   BOOLEAN PendingChanges;
+   ULONG CompletionFilter;
+   LIST_ENTRY IrpQueue;
+   PVOID Fcb;
+   PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback;
+   PSECURITY_SUBJECT_CONTEXT SubjectContext;
+   PVOID FsContext;
+   BOOLEAN Unicode;
+   BOOLEAN BufferExhausted;
+   PVOID Buffer; /* Buffer == NULL equals IgnoreBuffer == TRUE */
+   ULONG BufferSize;   
+   ULONG NextEntryOffset;   
+   PFILE_NOTIFY_INFORMATION PrevEntry;
+} NOTIFY_ENTRY, *PNOTIFY_ENTRY;
+
+
 /**********************************************************************
+ * NAME                    PRIVATE
+ * FsRtlpInitNotifyImplementation
+ *
+ */
+VOID
+STDCALL INIT_FUNCTION
+FsRtlpInitNotifyImplementation(VOID)
+{
+   ExInitializePagedLookasideList( &NotifyEntryLookaside,
+                                    NULL,
+                                    NULL,
+                                    0,
+                                    sizeof(NOTIFY_ENTRY),
+                                    FSRTL_NOTIFY_TAG,
+                                    0
+                                    );
+
+   
+}
+
+
+
+static
+inline
+BOOLEAN
+FsRtlpIsUnicodePath(
+   PSTRING Path
+   )
+{
+   ASSERT(Path->Length);
+   
+   if (Path->Length == 1) return FALSE; 
+    
+   if (*(WCHAR*)Path->Buffer == '\\') return TRUE;
+   
+   return FALSE;
+}
+
+
+/**********************************************************************
+ * NAME                    PRIVATE
+ * FsRtlpNotifyCancelRoutine
+ *
+ */
+static
+VOID
+STDCALL 
+FsRtlpNotifyCancelRoutine(
+   IN PDEVICE_OBJECT DeviceObject, 
+   IN PIRP Irp
+   )
+{
+   PFAST_MUTEX Lock;
+
+   //don't need this since we have our own sync. protecting irp
cancellation
+   IoReleaseCancelSpinLock(Irp->CancelIrql); 
+
+   Lock = (PFAST_MUTEX)Irp->Tail.Overlay.DriverContext[3];
+
+   ExAcquireFastMutex(Lock );
+   
+   RemoveEntryList(&Irp->Tail.Overlay.ListEntry);
+   
+   ExReleaseFastMutex(Lock);
+
+   Irp->IoStatus.Status = STATUS_CANCELLED;
+   Irp->IoStatus.Information = 0;
+
+   IoCompleteRequest(Irp, IO_NO_INCREMENT);
+   
+}
+
+
+
+static
+PNOTIFY_ENTRY
+FASTCALL
+FsRtlpFindNotifyEntry(
+   PLIST_ENTRY NotifyList,
+   PVOID FsContext
+   )
+{
+   PLIST_ENTRY EnumEntry;
+   PNOTIFY_ENTRY NotifyEntry;
+   
+   LIST_FOR_EACH(EnumEntry, NotifyList)
+   {
+      NotifyEntry = CONTAINING_RECORD(EnumEntry, NOTIFY_ENTRY,
ListEntry);
+      
+      if (NotifyEntry->FsContext == FsContext)
+      {
+         return NotifyEntry;
+      }
+   }
+
+   return NULL;   
+}
+
+/**********************************************************************
  * NAME							EXPORTED
  *	FsRtlNotifyChangeDirectory at 28
  *
@@ -57,7 +184,8 @@
  *	FsRtlNotifyCleanup at 12
  *
  * DESCRIPTION
- *	
+ *	 Called by FSD when all handles to FileObject (identified by
FsContext) are closed
+ *
  * ARGUMENTS
  *
  * RETURN VALUE
@@ -72,6 +200,61 @@
 	IN	PVOID		FsContext
 	)
 {
+   PNOTIFY_ENTRY NotifyEntry;
+   LIST_ENTRY CompletedListHead;
+   PLIST_ENTRY TmpEntry;
+   PIRP Irp;
+   
+   InitializeListHead(&CompletedListHead);
+   
+   ExAcquireFastMutex((PFAST_MUTEX)NotifySync);   
+   
+   NotifyEntry = FsRtlpFindNotifyEntry(NotifyList, FsContext);
+   
+   if (NotifyEntry)
+   {
+      /* free buffered changes */
+      if (NotifyEntry->Buffer)
+      {
+         ExFreePool(NotifyEntry->Buffer);
+      }
+
+      /* cancel(?) pending irps */
+      while (!IsListEmpty(&NotifyEntry->IrpQueue))
+      {
+         TmpEntry = RemoveHeadList(&NotifyEntry->IrpQueue);
+         Irp = CONTAINING_RECORD(TmpEntry , IRP,
Tail.Overlay.ListEntry);
+
+         /* irp cancelation bolilerplate */
+         if (!IoSetCancelRoutine(Irp, NULL))
+         {  
+            //The cancel routine will be called. When we release the
lock it will complete the irp.
+            InitializeListHead(&Irp->Tail.Overlay.ListEntry);
+            continue;
+         }
+
+         Irp->IoStatus.Status = STATUS_NOTIFY_CLEANUP; /* FIXME:
correct status? */
+         Irp->IoStatus.Information = 0;
+
+         /* avoid holding lock while completing irp */
+         InsertTailList(&CompletedListHead,
&Irp->Tail.Overlay.ListEntry);
+      }
+         
+      /* Unlink and free the NotifyStruct */
+      RemoveEntryList(&NotifyEntry->ListEntry);
+      ExFreeToPagedLookasideList(&NotifyEntryLookaside, NotifyEntry);
+   }
+   
+   ExReleaseFastMutex((PFAST_MUTEX)NotifySync);
+   
+   /* complete defered irps */
+   while (!IsListEmpty(&CompletedListHead)) 
+   {
+      TmpEntry = RemoveHeadList(&CompletedListHead);
+      Irp = CONTAINING_RECORD(TmpEntry , IRP, Tail.Overlay.ListEntry);
+      IoCompleteRequest(Irp, IO_NO_INCREMENT);     
+   }
+   
 }
 
 
@@ -119,6 +302,77 @@
 }
 
 
+
+static
+VOID
[truncated at 1000 lines; 1657 more skipped] 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.reactos.org/pipermail/ros-diffs/attachments/20050302/dc4578bd/attachment.html


More information about the Ros-diffs mailing list