[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