Commit graph

31794 commits

Author SHA1 Message Date
Aleksey Bragin 8edd5bdaa0 - Add IRP tests based on a Alexander Morozov's patch to Wine ("[try 3] Add tests for IoInitializeIrp and IoAllocateIrp").
svn path=/trunk/; revision=34947
2008-07-30 09:23:45 +00:00
Hervé Poussineau c6de7a80b8 Revert r34344, the mess with GetEnvironmentStrings/GetEnvironmentStringsA is expected.
svn path=/trunk/; revision=34946
2008-07-30 08:02:45 +00:00
Hervé Poussineau 9b55463daa unix define doesn't mean we're on a x86 compatible machine
svn path=/trunk/; revision=34945
2008-07-30 07:29:55 +00:00
Hervé Poussineau aa8cad03d0 Fix GetEnvironmentStrings/GetEnvironmentStringsA mess
svn path=/trunk/; revision=34944
2008-07-30 07:27:33 +00:00
Art Yerkes 4b9274519b Patch by Cameron Gutman (aicommander (at) gmail (dot) com)
- Remove a hack related to cancellation
- Make sure not to pass on a bad IRP on failure (in tdi)
- Remember connect irp
* Note: commit notes are arty's in this case

svn path=/trunk/; revision=34943
2008-07-30 06:05:20 +00:00
Art Yerkes d006ec695e Patch by Cameron Gutman (aicommander (at) gmail (dot) com)
- Remove a hack from DispTdiSendDatagram
- Fix a couple of bugs that resulted in clearing the wrong request

svn path=/trunk/; revision=34938
2008-07-29 21:52:09 +00:00
Johannes Anderwald 1fa91ed658 - fix an obvious bug (introduced by me)
See issue #3064 for more details.

svn path=/trunk/; revision=34936
2008-07-29 18:54:28 +00:00
James Tabor 6d82180d7a - Add Event handle type.
svn path=/trunk/; revision=34935
2008-07-29 18:53:46 +00:00
James Tabor a9cd7fec76 - Patch by Jeffrey Morlan: Fix bounds checking and change NtGdiDoPalette to use a temporary kmode buffer. See Bug 3383.
svn path=/trunk/; revision=34934
2008-07-29 18:11:18 +00:00
Johannes Anderwald 4c985ce93a - register network neighbourhood as a desktop namespace extension
svn path=/trunk/; revision=34933
2008-07-29 18:03:23 +00:00
Johannes Anderwald fc0eaa9b92 - update polish translation by Olaf Siejka (Caemyr)
svn path=/trunk/; revision=34932
2008-07-29 17:49:32 +00:00
Johannes Anderwald dcdadb236c - register shellink property sheet handler
- should make shellink property page visible again

svn path=/trunk/; revision=34931
2008-07-29 17:42:35 +00:00
Johannes Anderwald ff15b21470 - fix titles in folder property dialog
- translate title to native language when available

svn path=/trunk/; revision=34930
2008-07-29 17:19:16 +00:00
Johannes Anderwald 60db6af48b - implement folder property dialog
- sync chinese resource files

svn path=/trunk/; revision=34929
2008-07-29 16:52:39 +00:00
Jeffrey Morlan 9db67069ce - Remove unused hVScrollBar and hHScrollBar members in GUI_CONSOLE_DATA.
- Remove ScreenBufferSize member from GUI_CONSOLE_DATA; when building the structure for console.dll, send the actual screen buffer size instead.
- GuiConsolePaint, GuiIntDrawRegion: Adjust coordinates based on buffer's scroll position.
- GuiConsolePaint: Use ConioCoordToPointer when finding attribute at top-left.
- GuiConsoleHandlePaint: Don't leak the DC when the paint rectangle is empty.
- GuiConsoleHandleScroll: Actually update the buffer's scroll position, not just the scrollbar's. Allow scrolling either horizontally or vertically. Fix typo in SB_THUMBTRACK case. Don't rely on GetScrollInfo for bound checking - any thread can sabotage the scrollbar ranges.
- CsrGetScreenBufferInfo: Return the visible area in srWindow.

svn path=/trunk/; revision=34928
2008-07-29 16:10:38 +00:00
Christoph von Wittich 72cd091bff Odbccp32 dll doesn't have a DllMain function
reported by hto
See issue #3603 for more details.

svn path=/trunk/; revision=34924
2008-07-29 07:30:49 +00:00
Jeffrey Morlan af7891739c NtUserBeginPaint: Taking the bounding box of the update region first and clipping it to the client area afterwards was making rcPaint contain the entire client area when scrolling. It should be done the other way around: clip to the client area first, then box. Since there is already a clipped update region in the DC, this is easy; just use GdiGetClipBox.
svn path=/trunk/; revision=34923
2008-07-29 02:08:56 +00:00
James Tabor 274bd6b2ab - Added more hook points, WH_FOREGROUNDIDLE and WH_KEYBOARD.
- Fixed WH_CALLWNDPROC/RET, now the posted test program works as it should.
- Tested with Opera 9.51, FF, Seamonkey, Abiword, Miranda, Mirc and the rest of our applications.

svn path=/trunk/; revision=34922
2008-07-29 00:35:05 +00:00
Art Yerkes 2bd0499500 Fix my error not noticing that queued spinlock functions return KIRQL through
the actual function return, not through a parameter.

svn path=/trunk/; revision=34921
2008-07-28 22:33:11 +00:00
Art Yerkes 298e26754b - Reverse my previous (in retrospect) hack
- Make MmProbeAndLockPages smart enough to work at DISPATCH_LEVEL
- At Alex' request, remove the stand alone spinlock for the page list, and
  use the queued spinlock in the prcb.

svn path=/trunk/; revision=34920
2008-07-28 22:05:56 +00:00
Johannes Anderwald 67821bff32 - display volume label for disk drives. If there is no label, load default label
svn path=/trunk/; revision=34915
2008-07-28 19:47:19 +00:00
Aleksey Bragin 9655f89744 - Don't strictly check NTDDI_VERSION to WINXP or WS03, since in case of e.g. NTDDI_WS03SP1 the define would work incorrectly (skipping a structure member).
svn path=/trunk/; revision=34914
2008-07-28 18:38:11 +00:00
Johannes Anderwald 81e31939b1 - reenable drive properties dialog
svn path=/trunk/; revision=34913
2008-07-28 18:23:42 +00:00
Art Yerkes e98217024c Should fix the release build (sorry).
svn path=/trunk/; revision=34912
2008-07-28 18:21:35 +00:00
Jeffrey Morlan 83f07a8e37 - GuiConsoleInitScrollbar: Hide vertical scrollbar when not needed; use SB_VERT (not SB_HORZ) to set its information when it is; set sInfo.nPage according to window size in characters; calculate window pixel size, taking scrollbar width/height into account.
- GuiConsoleHandleNcCreate: Remove window sizing (now done in GuiConsoleInitScrollbar)
- GuiApplyUserSettings: Swap transposed min/max in cursor size calculation; don't assume that the physical top of the buffer is the same as the logical top; fix broken code where HAVE_WMEMSET isn't defined (wrong loop counts, Offset wasn't incremented); fix typo in calculating height difference. If either buffer or window size has changed, call GuiConsoleInitScrollbar.

svn path=/trunk/; revision=34911
2008-07-28 16:48:04 +00:00
Art Yerkes 7c5414460f This is a patch i've been keeping for a while. Yes, it's not "as nt does it",
but it solves a practical problem, and isn't particularly invasive (the main
change is the call to KdpEnableSafeMem ... everything else could be macroed
out if desired).  

This provides armour for kdbg and gdb that avoid faulting on bad addresses by
implementing a simple poor-man's mmu and letting the debuggers use it.

svn path=/trunk/; revision=34904
2008-07-28 14:47:17 +00:00
Dmitry Chapyshev 94f599dec2 - Add console version Appwiz. It is not finished, but fully works
svn path=/trunk/; revision=34902
2008-07-28 14:40:32 +00:00
Aleksey Bragin b971b4d659 Dmitry Gorbachev
- PDT of CSRSS has no entry for TCB of the thread, fix this problem.
See issue #3591 for more details.

svn path=/trunk/; revision=34901
2008-07-28 14:32:50 +00:00
Art Yerkes 258329b01b Fix (among other things) failure to boot when a CD is not inserted, caused by
the new (correct) ASSERT in mutex acquisition in MmProbeAndLockPages, which
was erroneously being called from IoBuildAsynchronousFsdRequest at
DISPATCH_LEVEL.  

The only correct course of action when calling IoBuildAsynchronousFsdRequest
at DISPATCH_LEVEL is to MmBuildMdlForNonPagedPool since the buffer must be 
nonpaged (if the IRP completes synchronously, we'll still be at DISPATCH_LEVEL)
This is the case when direct io is done at DISPATCH_LEVEL using
IoBuildAsynchronousFsdRequest.

svn path=/trunk/; revision=34899
2008-07-28 12:38:47 +00:00
Aleksey Bragin 966a7b788f - Silence crt's "wtf".
svn path=/trunk/; revision=34897
2008-07-28 11:30:08 +00:00
Ged Murphy 36dab01cab - Don't check outside of the array bounds
- Spotted by Marcelo Slomp <mslomp at linuxmail dot org>
See issue #3593 for more details.

svn path=/trunk/; revision=34892
2008-07-28 08:45:38 +00:00
Colin Finck 795b09cde7 Replace '#ifdef __linux__' by '#ifndef WIN32', etc. to fix compilation on Mac OS X (hint by Alex on ros-dev)
svn path=/trunk/; revision=34891
2008-07-28 08:32:04 +00:00
ReactOS Portable Systems Group a9f6591d2c - Don't use .spec file on ARM, it doesn't work.
- For the first time, the entire ARM build of ReactOS builds (for the components we've defined)!
- Now the user-mode fun begins.


svn path=/trunk/; revision=34890
2008-07-28 03:07:50 +00:00
ReactOS Portable Systems Group e34e342d45 - Fix build of NTOS and FreeLDR on ARM.
svn path=/trunk/; revision=34889
2008-07-28 03:07:03 +00:00
ReactOS Portable Systems Group 4eb79d6d88 - Fix FreeLDR for ARM build after some header changes that happen in NTOS.
svn path=/trunk/; revision=34887
2008-07-28 02:18:43 +00:00
ReactOS Portable Systems Group a249132448 - Define the "generic" versions of the ARM-specific HAL routines.
- Now the generic HAL builds without linker errors.


svn path=/trunk/; revision=34886
2008-07-28 02:15:40 +00:00
ReactOS Portable Systems Group 1b0bec70c1 - Fix the NTOS ARM build after the recent Mm changes.
svn path=/trunk/; revision=34885
2008-07-28 02:13:56 +00:00
ReactOS Portable Systems Group 80f7916a79 - We finally figured out how to build the CRT! It seems on ARM, we have to add __MSVCRT__ to all build targets.
- Thanks to the people who worked on the PPC port for making this obvious in the rbuild file :)


svn path=/trunk/; revision=34884
2008-07-28 02:13:39 +00:00
ReactOS Portable Systems Group a5a0461289 Now that MADDRESS_SPACE became nearly an empty structure pointing only at the root, it can completely go away. Now VadRoot really is a MM_AVL_TABLE structure.
The BalancedRoot.u1.Parent now points to what used to be MemoryAreaRoot. This isn't really the most proper fix out there -- the problem is that React starts with an no root, while Windows
starts with an empty balanced root. So for now we keep doing it the React way, which means we have about 10 ugly typecast hacks. On the other hand, we got rid of more than 100 of them.


svn path=/trunk/; revision=34881
2008-07-28 01:49:23 +00:00
ReactOS Portable Systems Group 7c1492c712 The address space creation lock is a guarded mutex, not a pushlock, in NT 5.2. While it is commendable to attempt using Vista optimizations (it is a push lock on Vista) in order to speed up
the kernel, it is entirely stupid to do so by completing ignoring the ramifications of this change, and furthermore, to pollute the kernel with typecasts, as well as to introduce non-standard
behavior. Ironically it is ion himself who made this change.

svn path=/trunk/; revision=34879
2008-07-28 01:11:19 +00:00
ReactOS Portable Systems Group 34954b16a4 There is no point in saving the address of the address space lock in the address space structure anymore, since this lock is always the address creation lock of the owner process,
and there's always an owner process now.

svn path=/trunk/; revision=34878
2008-07-28 00:56:39 +00:00
ReactOS Portable Systems Group 71f2416876 Looks like this address space nonsense made even less sense than originally understood. The kernel address space was something created very early-on, and associated with a global variable
that actually contained the address space itself (so it wasn't part of any process). Its locks however, were associated to the "current process", which, when this function is called, is the
idle process (which later is cloned into the initial system process). Shortly thereafter, the address space of the "current process" (still, at this point, the idle process) was initialized
with the function reserved for real processes (MmInitializeProcessAddressSpace), which among other things, performed a couple of user-mode mappings (which are irrelevant and should not be
part of the system process address space). This created a weird schism: the kernel address space was actually a global variable associated with no process at all, while the kernel process
had its own address space as well (which was not the kernel address space). It's a miracle this didn't screw anything up especially since whether or not the address space has an owner
determined the lowest address (which means that if the kernel process allocated a memory with its *own* address space, the code would think it was a user-mode process).
This patch gets rid of the kernel address space as a static structure, and instead makes it a pointer into the idle/system process' address space. It also gets rid of MmInitializeKernelAddresSpace
and instead makes use of the existing MmInitializeHandBuiltProcess, cleaning up the user-mode allocations previously made. Even though all address spaces now have an owner and are part of a
process, MmGetAddressSpaceOwner will still return NULL for now, to remain backwards compatible with legacy code.


svn path=/trunk/; revision=34876
2008-07-28 00:43:57 +00:00
ReactOS Portable Systems Group 487609a995 The puzzle of the design decisions behind the React address space structure continues to be troubling (perhaps there was no design?). Every time a process address space is initialized,
the owner process is stored (which we now use to figure out the lowest address). Recall that NULL means kernel, anything else means per-process. This is great, except that after some
painfull header groking, one understands that the PMADDRESS_SPACE structure is actually *not* a separate structure, but embedded within PEPROCESS itself. It is a React-specific structure
(hence the attempts to get rid of it), that seems to have been "overloaded" on top of the VadRoot structure that Windows uses for user-mode memory allocations. To clarify, this structure
is actually embedded inside the process that owns it, except for the kernel address space, which is a global variable. So there's absolutely *no* point in saving a reference to the owner
process, since we'll always be embedded inside it (except for kernel address space).
This patch creates the MmGetAddressSpaceOwner macro which either returns NULL for kernel address space, or uses the CONTAINING_RECORD macro to return the owner (embedded) process. 


svn path=/trunk/; revision=34873
2008-07-27 23:53:04 +00:00
ReactOS Portable Systems Group 908aede2ef - Remove MiGetUserPageDirectoryCount from the ARM Mm since this function is now useless after our cleanups.
svn path=/trunk/; revision=34872
2008-07-27 23:48:19 +00:00
ReactOS Portable Systems Group 62278bab4a More over-engineering: there really isn't any reason to keep track of the "LowestAddress" of the process' addres space. At first sight, this looked like a dynamic value that would define the
lowest address at which the process has allocated memory, but this isn't the case -- the variable actually defines the lowest valid address a process can allocate memory at. This is pretty
much a static value, that was compute by MmInitializeProcessAddressSpace, to either MM_LOWEST_USER_ADDRESS or MmSystemRangeStart, based on whether or not the address space has an owner process
(meaning it is a user-mode address space) or not (meaning it is a kernel mode address space).
This patch removes that value and all the complex code around checking it, and replaces it with a much simpler design: if there is an owner process, use MM_LOWEST_USER_ADDRESS during gap
calculations, otherwise, use MmSystemRangeStart. This is both faster, and wastes less space by not tracking static data.


svn path=/trunk/; revision=34869
2008-07-27 23:03:20 +00:00
Johannes Anderwald bbf489032b - implement changing drive volume name
- display default volume label "local disk" if there is no title
- verify that provided clsid is valid
- display drive property dialog
- note: changing volume label currently leads to a crash

svn path=/trunk/; revision=34867
2008-07-27 22:58:19 +00:00
ReactOS Portable Systems Group 8daee04c2a It seems unclear as to what the point of the Page Reference Count Table in the React Addres Space structure really was. It seems an over-engineered approach that actually causes more problems
then it attempts to solve. The idea is to be able to unmap PDEs when they are not required anymore (a noble idea), which saves you 4KB of non-paged pool whenever a process frees a chunk
of 4MB memory (oversimplification). The problem is that to keep track of this, an extremly expensive series of branches, comparisons, masks and shifts is applied every single time that
a page is mapped or unmapped. It also adds 8KB of non-paged pool to keep track of the references, which in some cases can be more wasteful than keeping the page tables around.
Finally, if the process quickly allocates and de-allocates memory in the same PDE range, we will effectively map and unmap the PDE continously, fragmenting hyperspace and slowing down perf.
This patch removes this functionality from the system and re-uses the code that was already present in Mmi386ReleaseMmInfo (with some optimizations and changes) to do this unmapping when the
process exists. This should make things faster, with a very small amount of increased memory footprint (we're talking about less than 100kb of non paged pool, in worse-case scenarios). 


svn path=/trunk/; revision=34865
2008-07-27 22:39:54 +00:00
ReactOS Portable Systems Group ac0487dfa5 - Fix a couple of bugs, and majorly refactor MmDeleteVirtualMapping to sync it to the x86 version somewhat more.
svn path=/trunk/; revision=34859
2008-07-27 20:58:23 +00:00
Jeffrey Morlan 8054941a9f - Work with screen buffer data using pointers rather than offsets; remove confusing GET_CELL_BUFFER and SET_CELL_BUFFER macros.
- CsrFreeProcessData: Merge two ifs with the same condition.
- Use the pointer-to-pointer trick to simplify linked list handling in CsrFreeProcessData, IntInsertAliasHeader, IntInsertAliasEntry, and IntDeleteAliasEntry.

svn path=/trunk/; revision=34858
2008-07-27 20:08:18 +00:00
ReactOS Portable Systems Group 027390f247 - Major cleanup, refactoring, and bugfixing of ARM Mm code in preparation for user-mode support.
- Sync the code a lot closer to its x86 counterpart, still more work to be done.
- Very soon, it should be possible to share upward of 50% of the new ARM code with the x86 version of React as well and unify the implementations.

svn path=/trunk/; revision=34857
2008-07-27 19:52:41 +00:00