Port 8443 was an extra TLS 1.1 server hosting only the testman webservice at a time when TLS 1.1 was still an option and we had no other choice on XP/2003.
Now that we can use curl and TLS 1.2/1.3 on these platforms thanks to Mark, there is no need for that extra server anymore.
I'd like to retire it at some point.
With the minimum Visual Studio version now being 2015, we no longer need to maintain two variants of the same code, and can stick to the commented and better understandable version.
This finally fixes our duplicated getopt functions from different sources and gives us an up to date and the most compatible implementation.
isohybrid actually relies on a glibc-specific getopt behavior that we previously hacked into the reactos_support_code.c implementation derived from BSD/mingw-w64.
widl also needs getopt and previously used an even older BSD-derived code.
unattend.inf only allows to add RunOnce entries, which are in theory only executed on the first boot after installation.
For almost a decade, this worked anyway to start regtest.cmd again after a ReactOS crash, because the registry and thus the deletion of the RunOnce entry wasn't stored on disk in case of a crash.
Thanks to Sylvain for the hint!
As Explorer processes the Run key right after RunOnce and therefore picks up regtest.cmd a second time during the first boot, exit the script just after adding the Run key.
Otherwise, rosautotest.exe would be started twice, with catastrophic results.
This is a rather graceful approach compared to sysreg2's 3 minute timeout before killing and restarting the entire VM.
Since we added autochk for FAT filesystems, the filesystem is often "fixed" after a reset with the consequence that ReactOS doesn't boot up anymore.
The sysreg2 restart code still remains for handling tests causing BSODs.
MSVC was previously given a "result" variable to copy the fscale result from st(0). This led to another "fld" FPU stack push at the very end without popping the source value from the FPU stack.
Moreover, this copy isn't even needed: A simple "fstp st(1)" at the end pops an element from the FPU stack while effectively storing the result in st(0), the register used for returning a double value.
This problem didn't affect GCC, as it is only given the "fscale" instruction and does all necessary stack operations itself.
However, looking into the CRT sources, I found many other i386 implementations with inline assembly suffering from the same problem.
Fortunately, they have been replaced by pure assembly implementations a while ago, so it's time to finally remove them.
ldexp would have also been a candidate for a pure assembly implementation, but the required check for NaN and setting errno (verified on Win2003) already outweighs the benefits.
And we cannot just do a NaN check with FUCOMI as this is an i686/pentiumpro instruction while we're still targeting i586/pentium.
I'm also using this opportunity to clean up the ldexp.c header and only put in the remaining contributors as returned by "git blame".
Thanks to NightWolve1975 for reporting the problem! (https://twitter.com/nightwolve1975/status/1099042477531643912)
Not much has changed, several options were added, but left at their default values.
However, if search problems persist after Doxygen 1.8.13 generated the documentation for the first time, we can play around with EXTERNAL_SEARCH.
PDBs reveal that these functions are also used in winspool.drv, but not imported from spoolss.dll to retain the client/server architecture.
As winspool.drv highly benefits from the MarshallUp* functions, I put them in a source file shared between spoolss.dll and winspool.drv.
The added API Tests cover my testing and all implemented features.
One more item done from https://reactos.org/wiki/Printing !
Print a debug message whenever an application newer than ReactOS' internal NT version is started.
This gets a simple "Hello World" compiled by VS' 2017 regular "v141" toolchain to run under ReactOS.
Please retry NT6+ applications!
As a bonus, the public database at https://svn.reactos.org/packages/rappmgr.cab is now automatically updated with every commit to that repository.
Thanks to Alexander Shaposhnikov for the idea and help!
Based on an original patch by Timo Kreuzer, with modifications by me to adapt it to latest HEAD and use a single exit path through the Cleanup label. This reliably frees all allocated handles.
The original code returns STATUS_SUCCESS for many cases. This has been preserved.
In the future, it should be checked though whether returning success is appropriate for all these cases.
CORE-6844
Yes, it checks the input handle and doesn't fail if an invalid level is given, because someone may still send a Command.
This also fixes CORE-12794. Thanks for reporting!
This is no official system DLL and WineD3D is its only user. But latest WineD3D prefers the libtxc_dxtn codebase instead of the alternative library we used.
This is also what Mesa uses and Fedora ships now that the patents have expired, so we should stick to the same.
I'm importing the libtxc_dxtn-1.0.1 codebase from https://people.freedesktop.org/~cbrill/libtxc_dxtn/
It compiles warning-free in our tree without modifying a single line!
I'm merging this Pull Request based on the positive response in CORE-12759.
I lack a proper test case myself, but my version at least shouldn't make things worse. In my opinion, the previous one was broken anyway due to using stdcall imports when WineD3D called cdecl ones.
This also removes the NSWPAT option from our buildsystem as dxtn was its latest user.
* Pass the correct handle to _RpcGetPrinter in GetPrinterW.
* Pass an empty string instead of a NULL pointer as wszComputerName to the GetPrinterLevel* functions, because this variable is later used as source for StringCbCopyExW.
* Don't check for GetLastError() == ERROR_SUCCESS in tests. Windows apparently only sets the last error in case of failure.
The Printing code should probably be changed similarly in a future commit.
Should fix CORE-14072
This may get more applications to work which previously called into the WINE-generated stubs (that throw an exception).
It also improves debug logs when the "winspool" debug channel is enabled. With such detailed debug logs, we may get an idea which winspool APIs need to be implemented sooner than others.
I still don't like that we're copying code between KD and KD64 instead of sharing it.
But as both modules are totally distinct at the moment, I won't be the one introducing shared functions between them.
This is a follow up to 50ae5e7c52, which TortoiseGit accidentally turned into a "Message only" commit...
Never hit ALT+Y by mistake! ;)
I still don't like that we're copying code between KD and KD64 instead of sharing it.
But as both modules are totally distinct at the moment, I won't be the one introducing shared functions between them.
This will be used by Testman.
Previously, it had to translate the short hash from the build number to a long hash, but such a database (GitInfo) only exists for commits in the master branch.
In C89, you can only initialize the first member of a union within a declaration. Unfortunately, that is the S_un_b UCHAR array for the S_un union inside struct in_addr.
So we have to initialize it with each UCHAR member of Address.
- REVISION is now something like "0.4.7-dev-53-g1304b53" instead of "r12345".
- Change WINDOWS_NT_BANNER to better represent the ReactOS version and the reported NT version.
- Introduce REACTOS_COMMIT_HASH which contains the full 40-character commit hash (for comparing revisions, e.g. in rosautotest/testman).
Previously, the Printing Stack was a mix of GPLed and LGPLed code. Having everything under GPL-2.0+ makes things consistent and allows me to import code from most Open Source licenses.
Given that the Printing Stack components are exchangeable with their Windows counterparts and implement documented interfaces, this license change doesn't impose any additional restrictions on dependent components (like printer drivers).
svn path=/trunk/; revision=75988
The code of the single GPL-2.0 only file "misc.c" was originally derived from GPL-2.0 only devmgmt.
I have now replaced it with the same code from LGPL-2.1+ mmc, which makes my application a full GPL-2.0+ work. This is legit, because I know that Thomas Weidenmueller is the original author of the "misc.c" code.
svn path=/trunk/; revision=75987
Our driver has not seen any development since 2010 and the current fastfat driver has long surpassed it.
Even more important, FullFAT is licensed under a modified version of GPLv3 that forbids commercial usage. Shipping it as a ReactOS dependency would render the OS unusable for commercial scenarios.
If anybody wants to resurrect the driver, you can always get it from the repository history.
svn path=/trunk/; revision=75986
- The pshpack and poppack headers were rewritten from scratch as their current versions came with no license information and included obsolete checks (e.g. for an ancient FreeBSD version).
I have put the new ones under CC0-1.0, which is equivalent to Public Domain but legally valid also in jurisdictions which have no concept of Public Domain (e.g. Germany).
- Relicense nls.h under CC0-1.0 too. I'd recommend the same for typedefs.h, but I'm not the only contributor to that file.
svn path=/trunk/; revision=75985
- The original header committed in 2004 clearly indicated "or any later version", so use GPL-2.0+
That header has since been removed in r33507 by some "Colin Finck" guy ;)
- Add Hermès to the list of copyright holders, since he rewrote most of this in r62694.
svn path=/trunk/; revision=75983
Update mkisofs to schily-2017-09-07.
Among other things, this version comes with an upstream fix for David's x64 fix in r75399. We are now using 100% unmodified upstream code again.
svn path=/trunk/; revision=75806
- Add a detection routine for CDFS (ISO-9660) volumes that verifies the Primary Volume Descriptor.
- Use this to also detect CDFS on disks and load the CDFS driver if it has not been loaded yet (e.g. when a bootcd/livecd flashed USB drive is inserted at boot of an installed ReactOS).
- Fix a comment in udfs.c.
svn path=/trunk/; revision=75630
- Add a basic CDFS filesystem library "cdfslib" for checking and formatting a CDFS volume. Checking is unimplemented and formatting not supported anyway :)
- Use this library in the new "ucdfs" DLL and that DLL in "autochk". Fixes the "Unable to verify a CDFS volume" message at boot.
- Return the right device type (FILE_DEVICE_CD_ROM or FILE_DEVICE_DISK) in when querying volume information in cdfs.sys to get the proper icon in Explorer.
svn path=/trunk/; revision=75591
- Make our isohybrid create an MBR with partition type 0x96.
This properly assigns a drive letter to the Live-CD and lets me boot into desktop using "qemu -hda livecd.iso".
Fixes CORE-13184
svn path=/trunk/; revision=75586
Register CDFS as a disk filesystem too in order to flash our ISOs directly to USB drives and boot from them. Also fix some DPRINTs in the course of that.
One step closer towards CORE-13184: This gets qemu -hda bootcd.iso to work.
What still doesn't work is qemu -hda livecd.iso and booting from a flashed USB drive on real hardware.
Further changes are also required in fs_rec, but this code isn't ready yet and doesn't seem to be the current blocker either.
Credits go to the entire Hackfest Team for helping on this!!
svn path=/trunk/; revision=75579
Lower MAX_DISKREADBUFFER_SIZE to let INT 13h, AH=42h only read a maximum of 127 sectors (instead of 128 previously).
This fixes USB booting into the kernel on at least Dell Latitude D531 and Lenovo ThinkPad X61.
Now CORE-13184 remains (in a VM and on real hardware, probably related to the CDFS driver)
svn path=/trunk/; revision=75564
Apply a consistent style to all similar functions:
- Spoolss functions don't necessarily set ERROR_SUCCESS. Check the boolean return value instead and only query the error code on failure.
- Use AlignRpcPtr and UndoAlignRpcPtr wherever feasible.
- Use one static function per level that can be called from both Get* and Enum* APIs.
- Use PackStrings in all functions that return structures with strings.
- Add TRACEs to all non-static functions in localspl.
- Pass a double pointer to all Marshalling functions and advance to the next structure there.
- Perform sanity checks and return the right error codes in a Windows-compatible way.
- Return TRUE when an Enum* API has no elements to enumerate.
Also fixes CORE-12793
svn path=/trunk/; revision=75287
Add a simple API Test for netapi32.dll, only covering DsRoleGetPrimaryDomainInformation so far.
It succeeds in ReactOS, but outputs a heap error in the debug log. In real world applications, this later leads to a heap assertion failure.
svn path=/trunk/; revision=75208
- Create the actual generic handle in _LocalOpenPrinterHandle.
- Fix _RpcClosePrinter call.
- Enable many more tests in winspool_apitest, GetPrinterData.
- Bail out with ERROR_INVALID_PARAMETER for empty strings in _MakePrinterSubKey as well.
- Add the Name registry value for "Dummy Printer on LPT1" to make a test succeed.
This fixes many basic things.. which only got unnoticed, because Printing is only used in the form of API Tests so far.
CORE-13458
CORE-13459
svn path=/trunk/; revision=75207
- Implement GetPrinterDataA, GetPrinterDataExA, GetPrinterDataExW, GetPrinterDataW, SetPrinterDataA, SetPrinterDataExA, SetPrinterDataExW, SetPrinterDataW.
They support all features for Print Server and Printer Handles (minus security checks!)
I've also added tests for them.
- Store Printer data in SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers instead of SYSTEM\CurrentControlSet\Control\Print\Printers and create a registry symlink from the former path to the new one just like Windows does.
According to https://social.technet.microsoft.com/Forums/windowsserver/en-US/a683ab54-c43c-4ebe-af8f-1f7a65af2a51, this is needed when having >900 printers to work around a size limit of the SYSTEM registry hive. And if Windows has both locations, we need both for compatibility anyway.
- Add several settings which are queried by the new Printer Data APIs when working with Print Server Handles.
- Store the job directory in the Windows-compatible "DefaultSpoolDirectory" setting and make use of it.
- Revert the ASSERTs in LocalEnumPrinters again to let us verify the NULL pointer exceptions in localspl_apitest (thanks Serge! CORE-13433)
- Translate ERROR_INVALID_NAME to ERROR_INVALID_PRINTER_NAME in all cases in OpenPrinterW (thanks Victor! CORE-13412)
- Make EnumMonitorsW and EnumPortsW in spoolss more robust against failing Print Monitors.
- Remove the wrong !phPrinter check in OpenPrinterW to make Print Server Handles work for real.
- Fix error handling when memory allocation fails: HeapAlloc doesn't set last error, so it's just wrong to query or return it.
One more item done from https://reactos.org/wiki/Printing !
This is all still a big Work-in-Progress, with many subtle bugs deep down in ReactOS, for which I need to open additional tickets. But I didn't want to make this commit even bigger..
svn path=/trunk/; revision=75125
SetDefaultPrinterW needs to fail with ERROR_INVALID_PRINTER_NAME if the input parameter is invalid. Also add a test for that.
svn path=/trunk/; revision=74518
- Implement GetDefaultPrinterA/W and SetDefaultPrinterA/W in winspool.drv. Also add tests for these functions.
- Set our "Dummy Printer on LPT1" as the default printer in the user registry.
- Return meaningful values for DeviceNotSelectedTimeout and TransmissionRetryTimeout in PRINTER_INFO_5 in localspl.
The Print dialog now preselects "Dummy Printer on LPT1" in all applications.
One more task done from the list at https://reactos.org/wiki/Printing :)
svn path=/trunk/; revision=74513
Patch all our ISOs (bootcd, bootcdregtest, livecd, hybridcd) with isohybrid in order to make them bootable from HDDs or any kind of USB drives.
The added MBR at the beginning of each ISO doesn't cause any harm for normal CD booting anymore after my patch in r74460.
There is also no need for the dedicated isohybrid targets anymore.
Our ISOMBR master boot record now successfully loads our ISOBOOT boot sector. ISOBOOT loads FreeLdr and indicates that we're booting from HDD, so that FreeLdr can successfully load the kernel.
We then bugcheck in the kernel with either 0x0000007B (INACCESSIBLE_BOOT_DEVICE) using bootcd or 0x0000006B (PROCESS1_INITIALIZATION_FAILED) using livecd.
Testcase is:
qemu-system-i386 -m 512 -hda bootcd_or_livecd.iso
Needs more investigation, but these are separate bugs and I consider CORE-12648 fixed.
svn path=/trunk/; revision=74461
Set BootPartition (DH) to 0xFF in isoboot.S when booting from CD.
Then check for that 0xFF value in FreeLdr to unambiguously detect CD booting instead of using BIOS functions (which don't work reliably on broken BIOSes) or checking for an MBR (which doesn't work on hybrid ISOs).
CORE-12692
svn path=/trunk/; revision=74460
- Refactor the code returning PRINTER_INFO_* yet another time to support both EnumPrinters and GetPrinter calls.
- Implement support for PRINTER_INFO_1 through PRINTER_INFO_9 as well as the mostly unknown PRINTER_INFO_STRESS (level 0) structure and return as much information as we can.
- Implement GetPrinterW / LocalGetPrinter.
The Printers Shell folder in Explorer now shows our "Dummy Printer on LPT1" and we pass all 291 winspool:EnumPrinters API tests :)
svn path=/trunk/; revision=74433
Implement all corner cases of handling the Name parameter in EnumPrinters. This can be done in a common way for all levels.
Fixes more tests.
svn path=/trunk/; revision=74393
Don't include inttypes.h, which isn't available on MSVC < 2013. Add the 4 needed typedefs to reactos_support_code.h instead.
Fixes CORE-13031
svn path=/trunk/; revision=74351
- Refactor LocalEnumPrinters to make it ready for supporting additional levels.
- Correctly handle all passed flags for Level 1 queries to the Local Print Provider.
- Introduce strsafe functions to LocalEnumPrinters in a way that actually makes the code smaller. To be done in other parts too.
- Use PackStrings in LocalEnumPrinters to simplify the code.
- Return the correct 3 strings in the Description field of Level 1 queries. That also introduces the "Location" field.
- Remove debug spam in _OpenEnvironment.
[SPOOLSV]
- Make use of the newly implemented AlignRpcPtr/UndoAlignRpcPtr. Fixes a test.
[WINSPOOL]
- Dismiss invalid levels already in EnumPrintersW and zero the input buffer here (but not in localspl). Verified by a test.
EnumPrintersW for Level 1 should be fully supported now.
svn path=/trunk/; revision=74324
Add ASSERTs, improve documentation and the variety of tests for AlignRpcPtr/UndoAlignRpcPtr.
Based on comments by Serge Gautherie.
svn path=/trunk/; revision=74323
Implement the undocumented AlignRpcPtr and UndoAlignRpcPtr functions used by many Rpc* functions in spoolsv according to traced callchains.
I could reverse engineer them entirely using rohitab.com's API Monitor and black-box testing.
I also add documented tests covering all cases I found out. We now pass 17/17 tests on Windows Server 2003 and ReactOS.
Also const-ify a parameter in PackStrings.
svn path=/trunk/; revision=74297