Jérôme Gardou
8a8b4db447
[NTOS:MM] Make the page LRU list a real LRU list.
...
Also, implement flushing mapped sections to disk on shutdown.
2021-02-03 09:41:23 +01:00
Jérôme Gardou
bde2ee571a
[NTOS:FSRTL] Properly leave FsRtl when returning STATUS_CANT_WAIT
2021-02-03 09:41:23 +01:00
Jérôme Gardou
3efc5b1734
[NTOS:MM] Fix unlocking on failure path
2021-02-03 09:41:23 +01:00
Jérôme Gardou
d23dbdda4c
[NTOS:MM] Remove unused field
2021-02-03 09:41:23 +01:00
Jérôme Gardou
f201b8af78
[NTOS:MM] Do not acquire Pfn lock in MmGetRmapListHead
...
All callers already hold it
2021-02-03 09:41:23 +01:00
Jérôme Gardou
727e73f253
|NTOS:MM] Simplify some code
2021-02-03 09:41:23 +01:00
Jérôme Gardou
48e1c8593f
[NTOS:PO] Flush dirty pages after flushing volumes
2021-02-03 09:41:23 +01:00
Jérôme Gardou
5949d5095d
[NTOS:CC][NTOS:MM] Try respecting ValidDataLength
2021-02-03 09:41:23 +01:00
Jérôme Gardou
bdb73edab7
[NTOS:CC] Flush the whole VACB
...
Let Mm know what it has to do.
2021-02-03 09:41:23 +01:00
Jérôme Gardou
804f5a41ed
[NTOS:CC] Improve trace messages
2021-02-03 09:41:23 +01:00
Jérôme Gardou
20fe42c9e9
[NTOS:CC] Simplify CcFlushCache implementation
2021-02-03 09:41:23 +01:00
Jérôme Gardou
9b6240ee03
[NTOS:CC] Get rid of ROS_VACB:Valid
2021-02-03 09:41:23 +01:00
Jérôme Gardou
e46f1a9af3
[NTOS:MM] Disable APC while performing Paged Read
2021-02-03 09:41:23 +01:00
Jérôme Gardou
02167f2fb3
[NTOS:CC] Properly return the public BCBs
2021-02-03 09:41:23 +01:00
Jérôme Gardou
33cde28312
[NTOS:CC] Simplify CcRosDeleteFileCache
2021-02-03 09:41:23 +01:00
Jérôme Gardou
a9193b5cc2
[NTOS:CC] Remove dead code
2021-02-03 09:41:23 +01:00
Jérôme Gardou
8ed15a49a7
[NTOS:MM] Fix a race
2021-02-03 09:41:23 +01:00
Jérôme Gardou
11eee4eeec
[NTOS:MM] Check that we don't add rmap for NULL process
2021-02-03 09:41:23 +01:00
Jérôme Gardou
caf89b9582
[NTOS:MM] Fix a race condition when unmapping sections views
2021-02-03 09:41:23 +01:00
Jérôme Gardou
57ee31ee33
[NTOS:CC] Perform sanity checks before doing anything else
2021-02-03 09:41:23 +01:00
Jérôme Gardou
cff3c399c6
[NTOS:MM] Fix input validation/correction in MmMapViewInSystemSpace
2021-02-03 09:41:23 +01:00
Jérôme Gardou
8287a098b9
[NTOS:CC] Fix potnetial use-after-free
2021-02-03 09:41:23 +01:00
Jérôme Gardou
358d06c47c
[NTOS:CC] Always honor WriteThrough parameter in CcUnpinRepinnedBcb
2021-02-03 09:41:23 +01:00
Jérôme Gardou
1505abbc09
[NTOS:CC] Do not write behind concurrently the same file
2021-02-03 09:41:23 +01:00
Jérôme Gardou
347a4f146b
[NTOS] Loop again and again until the whole cache is empty when sutting down
2021-02-03 09:41:23 +01:00
Jérôme Gardou
addf824d87
[NTOS:MM] Keep image maps & file maps coherent at the time of creating the image map
2021-02-03 09:41:23 +01:00
Jérôme Gardou
543112008a
Fix physical memory section creation
2021-02-03 09:41:22 +01:00
Jérôme Gardou
91f6fa0259
Disable CcScheduleReadAhead call
2021-02-03 09:41:22 +01:00
Jérôme Gardou
6d97d8d2e1
[NTOS:CC] Fix some tests, complain where the current implementation won't let us do the right thing
2021-02-03 09:41:22 +01:00
Jérôme Gardou
674ab3dce3
[NTOS:MM] Remove a check for now
2021-02-03 09:41:22 +01:00
Jérôme Gardou
1f796267bc
[NTOS:MM] Do not reference the section when mapping it.
...
Referencing the segment is enough.
2021-02-03 09:41:22 +01:00
Jérôme Gardou
3c2b1bf59b
[NTOS:MM] Save the dirty bit when sharing a segment page
2021-02-03 09:41:22 +01:00
Jérôme Gardou
3141668724
[NTOS:MM] Various fixes.
...
Fix MmFlushImageSection behaviour
Remove an invalid ASSERT
2021-02-03 09:41:22 +01:00
Jérôme Gardou
30f71c7fc0
[NTOS] Zero data unconditionally after segment end, unless section is created with SEC_RESERVE
...
Use a SEC_RESERVE section in Cc
2021-02-03 09:41:22 +01:00
Jérôme Gardou
a52bc6d179
[NTOS:CC] Restore read-ahead behaviour in CcCopyRead
2021-02-03 09:41:22 +01:00
Jérôme Gardou
4441b1cd44
[NTOS:CC] Fix some tests for CcCopyRead and CcCopyWrite
...
Most importantly: raise the right status when provided an invalid buffer.
2021-02-03 09:41:22 +01:00
Jérôme Gardou
aab24ed1b1
[NTOS:MM] Have the legacy Mm be less greedy about the number of pages it wants
2021-02-03 09:41:22 +01:00
Jérôme Gardou
fb07802956
[NTOS:MM] Make the situation about dirty pages in image map a bit clearer
2021-02-03 09:41:22 +01:00
Jérôme Gardou
cd23d6e19a
[NTOS:CC] Honor FO_WRITE_THROUGH flag in CcCopyWrite and fix it in CcZeroData
2021-02-03 09:41:22 +01:00
Jérôme Gardou
f8aa14ce4e
[NTOS:CC] Acquire file for flush when flushing if necessary
2021-02-03 09:41:22 +01:00
Jérôme Gardou
d9f7459bb1
[NTOS:MM] Fix file object bad referencing
2021-02-03 09:41:22 +01:00
Jérôme Gardou
2d3454a809
[NTOS:IO] VFAT sucks less now
2021-02-03 09:41:22 +01:00
Jérôme Gardou
cbfc04157d
[NTOS:CC] File size check fix
2021-02-03 09:41:22 +01:00
Jérôme Gardou
e39fc52d25
[NTOS/MM] Set FSRTL_MOD_WRITE_TOP_LEVEL_IRP top-level IRP when paging-out
2021-02-03 09:41:22 +01:00
Jérôme Gardou
f114209782
[NTOS/MM] Do not zero out the tail of the segment if the mapping is not an image
2021-02-03 09:41:22 +01:00
Jérôme Gardou
7d70af61e8
[NTOS:MM] Acquire file lock when creating section
2021-02-03 09:41:22 +01:00
Jérôme Gardou
d2fa434cb7
[NTOSKRNL] Address issues raised in PR 3361 review
2021-02-03 09:41:22 +01:00
Jérôme Gardou
70c62aa2c9
[NTOS:CC] Fix Vacb size usage & check
2021-02-03 09:41:22 +01:00
Jérôme Gardou
c74cbf0c0b
[NTOS/CC] Be more precise when notifying Mm about dirty pages
2021-02-03 09:41:22 +01:00
Jérôme Gardou
c295d6b229
[NTOS:CC] Fix releasing VACB when an exception is raised in CcZeroData & CcCopyWrite
2021-02-03 09:41:22 +01:00
Jérôme Gardou
7f47f03296
[NTOS:CC] Rewrite the non-cached path of CcZeroData
2021-02-03 09:41:22 +01:00
Jérôme Gardou
36e18aab35
[NTOS:CC] Remove unused functions
2021-02-03 09:41:22 +01:00
Jérôme Gardou
7dab3583cc
[NTOS/MM] Force flushing when the page is dirtified in user mode
2021-02-03 09:41:22 +01:00
Jérôme Gardou
91edefa11e
[NTOS:MM] Do not limit ourselves in reading or writing the file
2021-02-03 09:41:22 +01:00
Jérôme Gardou
774a4c703f
[NTOS/MM] Misc fixes
...
Purge data section object before creating an image mapping
Zero-out the tail of the page after reading from file
Properly map page as read-only when paging-in a COW memory map.
2021-02-03 09:41:22 +01:00
Jérôme Gardou
0933337404
[NTOS/MM] Do not dirtify section pages for system-space maps
...
Cc does it for itself.
2021-02-03 09:41:22 +01:00
Jérôme Gardou
d440434a8e
[NTOS/MM] Do not error when FS returns STATUS_END_OF_FILE for paged read.
...
Also remove a seemingly invalid ASSERT
2021-02-03 09:41:22 +01:00
Jérôme Gardou
b46173edaf
[NTOS/MM] DO not assert when being passed invalid parameters in MmCreateSection
2021-02-03 09:41:22 +01:00
Jérôme Gardou
ba49c39041
[NTOS/MM] Assert there are no RMAP left before freeing the page
2021-02-03 09:41:22 +01:00
Jérôme Gardou
d932bdb950
[NTOS:MM] Fix locking when paging out
2021-02-03 09:41:22 +01:00
Jérôme Gardou
d8cdb89fb0
[NTOSKRNL] Overhaul Cc and Mm relationship
...
Previously, when creating a file section, Mm requested Cc to cache the file, then Cc would request pages from Mm, then Mm would request them back to serve its file-mapping role
Now, Mm does it all by itself. If file cahcing is requested by the FS driver, then Cc creates a file mapping and uses that to serve its purpose.
This is a rewrite of Cc
2021-02-03 09:41:22 +01:00
Jérôme Gardou
e4047d1521
[NTOS/MM] Introduce MmArePagesResident and MmMakePagesResident
2021-02-03 09:41:22 +01:00
Jérôme Gardou
f1631b44e1
[NTOS/MM] Introduce MmMapViewInSystemSpaceEx
2021-02-03 09:41:22 +01:00
Jérôme Gardou
4f6fd6c42b
[NTOS/MM] Infer that the Memory Area is an image mapping from its VAD node
2021-02-03 09:41:21 +01:00
Jérôme Gardou
c3bd70cfd1
[NTOSKRNL/MM] Fix a few wine tests
2021-02-03 09:41:21 +01:00
Jérôme Gardou
4abda863ce
[NTOSKRNL/MM] Reduce use of MiIsRosSectionObject
2021-02-03 09:41:21 +01:00
Jérôme Gardou
b7d988ae5b
[NTOSKRNL] Get rid of MM_ROS_SECTION_OBJECT
2021-02-03 09:41:21 +01:00
Jérôme Gardou
8b98ff66ea
[NTOSKRNL] Store File Object in the segment instead of Section object
2021-02-03 09:41:21 +01:00
Jérôme Gardou
e980efebd4
[NTOSKRNL] Store the MM_IMAGE_SECTION_OBJECT pointer in SECTION::Segment
2021-02-03 09:41:21 +01:00
Jérôme Gardou
c6a87f28bf
[NTOSKRNL] Get rid of MEMORY_AREA::Protect
...
Use the VAD node instead
2021-02-03 09:41:21 +01:00
Jérôme Gardou
c9f924940a
[NTOSKRNL/MM] Get rid of useless members of MEMORY_AREA struct
2021-02-03 09:41:21 +01:00
Jérôme Gardou
defbf63416
[NTOSKRNL] Use PSECTION struct where possible
2021-02-03 09:41:21 +01:00
Jérôme Gardou
462d9a0974
[NTOSKRNL] Unload the cargo: We only use tiny bits of "NEWCC"
2021-02-03 09:41:21 +01:00
Jérôme Gardou
25722e647e
[NTOSKRNL] Embed a SECTION struct inside MM_ROS_SECTION_OBJECT
2021-02-03 09:41:21 +01:00
Jérôme Gardou
c3ec5d801c
[NTOSKRNL] Disable more unused code
2021-02-03 09:41:21 +01:00
Jérôme Gardou
10ac04ff6e
[NTOSKRNL] Get rid of ROS_SECTION_OBJECT::AllocationAttributes in favor of MM_SECTION_FLAGS
2021-02-03 09:41:21 +01:00
Jérôme Gardou
819406ac97
[NTOSKRNL] Get rid of pagefile-backed sections support in legacy Mm
2021-02-03 09:41:21 +01:00
Jérôme Gardou
7afecee5eb
[NTOSKRNL] Rename MM_ROS_SECTION_OBJECT:SectionPageProtection to InitialPageProtection
2021-02-03 09:41:21 +01:00
Jérôme Gardou
54c760574b
[NTOSKRNL] Rename MM_ROS_SECTION_OBJECT:MaximumSize to SizeOfSection
...
For consistency with the SECTION struct
2021-02-03 09:41:21 +01:00
Jérôme Gardou
073ec9b0d4
[NTOSKRNL][NDK] Get rid of SECTION_OBJECT typedef
...
We will use the more recent SECTION (already used in ARM3) and this will avoid confusions
2021-02-03 09:41:21 +01:00
Jérôme Gardou
9b74e5ed4f
[NTOSKRNL] Do not compile unused code
2021-02-03 09:41:21 +01:00
Jérôme Gardou
857dd4ae36
[NTOS:MM] Properly handle the 1-offset of paging files
2021-02-02 10:17:28 +01:00
George Bișoc
1903b568b6
[NTOS:SE] Implement SECURITY_TOKEN_PROXY_DATA, SECURITY_TOKEN_AUDIT_D… ( #3432 )
...
ProxyData and AuditData are pointers to an arbitrary data, which instead, they should point to their respective data structures. This serves as preparation for SepFreeProxyData and SepCopyProxyData functions implementations in the future (regarding the proxy data stuff specifically).
For further details:
https://www.vergiliusproject.com/kernels/x86/Windows%202003/SP2/_TOKEN
https://www.nirsoft.net/kernel_struct/vista/SECURITY_TOKEN_AUDIT_DATA.html
https://www.nirsoft.net/kernel_struct/vista/SECURITY_TOKEN_PROXY_DATA.html
https://www.nirsoft.net/kernel_struct/vista/PROXY_CLASS.html
2021-02-02 01:55:42 +03:00
Jérôme Gardou
158235bdd5
[NTOS:KE] Fix EIP only when the breakpoint is a break
...
Fixes ntdll:exception winetest crash
ROSTESTS-80
2021-02-01 16:39:39 +01:00
Hervé Poussineau
794f15e45f
[NTOSKRNL] Fix link with GCC x64
...
KeLowerIrql/KeRaiseIrqlToDpcLevel/KfRaiseIrql are defined as FORCEINLINE in ntoskrnl/ke/amd64/irql.c
Use KxLowerIrql/KxRaiseIrqlToDpcLevel/KxRaiseIrql instead, which call their respective Ke*/Kf* counterparts.
2021-01-28 23:10:01 +01:00
Hervé Poussineau
9d110db433
[NTOS:KDBG] Support KDBG on x64
2021-01-28 20:44:21 +01:00
Hervé Poussineau
ae4ce99e00
[ASM x64] Fix usage of macro .allocstack
...
.allocstack only accepts one 'size' parameter."
2021-01-28 20:31:16 +01:00
Victor Perevertkin
91fceab36e
[NTOS:IO][NTOS:PNP] Add PiActionAddBootDevices device action
...
During the boot process, it makes possible to initalize the driver's
devices right after the driver is loaded. Moreover, this way one can be
sure that all critical devices are initialized before the
IopMarkBootPartition call (because we explicitly call the driver's
AddDevice routine now, after each driver is loaded)
CORE-7826
2021-01-27 05:15:16 +03:00
Victor Perevertkin
798fc13b48
[NTOS:PNP] Implement NT5.2-like DEVICE_NODE state management
...
- Use DeviceNode->State field and its values, instead of
DeviceNode->Flags for tracking current node state
- Change DNF_* flags to the ones compatible with Windows XP+
- Simplify state changes for device nodes and encapsulate all the logic
inside the PiDevNodeStateMachine routine. This makes the ground for
future improvements in the device removal sequence and
resource management
- Now values inside DeviceNode->State and ->Flags are compatible with
the windbg !devnode macro and can be tracked using it
- BUGFIX: fixed cases where IRP_MN_START_DEVICE or
IRP_MN_QUERY_DEVICE_RELATIONS may be sent to a device after a
IRP_MN_REMOVE_DEVICE
CORE-7826
2021-01-27 05:15:15 +03:00
Victor Perevertkin
b704292808
[NTOS:IO] Add more enumeration requests during the boot process
...
This is to ensure that all needed devices are initialized during the
early boot
CORE-7826
2021-01-27 05:15:15 +03:00
Jérôme Gardou
f63401060d
[NTOS:MM] Fix compilation for amd64 port.
...
Addendum to 0919324772
2021-01-22 10:34:20 +01:00
Jérôme Gardou
0919324772
[NTOS:MM] Get rid of "compatibility layer" for hyper space mappings
...
Let's call that a bug layer instead.
2021-01-22 09:33:06 +01:00
Jérôme Gardou
57e8684bc6
[NTOS:MM] Allow "creating" a PDE in legacy Mm for foreign process
2021-01-22 09:32:36 +01:00
Alex Henrie
35f3034879
[NDK] "Reserved" member in SYSTEM_PROCESSOR_INFORMATION is "MaximumProcessors" for Windows 8+ ( #3421 )
...
Co-authored-by: Hermès BÉLUSCA - MAÏTO <hermes.belusca-maito@reactos.org>
2021-01-09 23:15:36 +01:00
Hervé Poussineau
ff7035d940
[ASM x64] Change ; by /* */ for comments
...
Syntax with semi-colon is not supported by gas.
2021-01-07 21:12:11 +01:00
Hervé Poussineau
e581123c35
[NTOSKRNL] Correctly use SEH2 macros (fixes GCC x64 compilation)
2021-01-05 19:24:23 +01:00
Jérôme Gardou
c8d07514c8
[CMAKE] Fix GCC -fstack-protector usage
2021-01-05 13:38:57 +01:00
Victor Perevertkin
e5254974d2
[NTOS:IO] Start loading drivers from the disk only after SystemRoot is initialized
...
Add another PnPBootDriversInitialized variable to indicate a point where
both disk subsystem and SystemRoot symlink are initialized, and use it
in a PiCallDriverAddDevice call.
2021-01-04 16:50:33 +03:00
Victor Perevertkin
c4c0585f96
[NTOS:IO][NTOS:PNP] Implement PiCallDriverAddDevice
...
- Move the driver's name obtaining logic into the IopGetDriverNames
function
- Create a new PiCallDriverAddDevice instead of PipCallDriverAddDevice
and move it to pnpmgr/devaction.c file. Move around all its internal
helpers too
- Support a proper Windows-compatible driver loading order for a PDO
(lower filters, main service, upper filters, etc.)
- Set a correct Problem for the DeviceNode, in case of an error during
driver loading
- Check the Start Type for all drivers before loading
- Do not try to load drivers during the early boot stage when there is
no disk subsystem initialized
2021-01-04 16:50:33 +03:00
Victor Perevertkin
4c95339da0
[NTOS:IO] Refactoring of the driver initialization code (2)
...
- Do not hold the IopDriverLoadResource while trying to reference a
driver object (but still acquire it when we actually need to load a
driver)
- Change IopLoadDriver and IopInitializeDriverModule to use registry
handle instead of a service name string and/or full registry path
- Do not try to reference a driver object inside IopLoadDriver. It's
supposed to be done before the function call
2021-01-04 16:50:33 +03:00