On 06.11.2016 4:54, Ivan Akulinchev wrote:
Signed-off-by: Ivan Akulinchev ivan.akulinchev@gmail.com
dlls/ntdll/tests/Makefile.in | 1 + dlls/ntdll/tests/sxs.c | 141 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 142 insertions(+) create mode 100644 dlls/ntdll/tests/sxs.c
diff --git a/dlls/ntdll/tests/Makefile.in b/dlls/ntdll/tests/Makefile.in index fc352dd..7fe1a70 100644 --- a/dlls/ntdll/tests/Makefile.in +++ b/dlls/ntdll/tests/Makefile.in @@ -21,5 +21,6 @@ C_SRCS = \ rtlbitmap.c \ rtlstr.c \ string.c \
- sxs.c \ threadpool.c \ time.c
diff --git a/dlls/ntdll/tests/sxs.c b/dlls/ntdll/tests/sxs.c new file mode 100644 index 0000000..e04803b --- /dev/null +++ b/dlls/ntdll/tests/sxs.c @@ -0,0 +1,141 @@ +/*
- Tests for the Windows side-by-side assemblies.
- Copyright 2016 Ivan Akulinchev
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
- */
+#include "ntstatus.h" +#define WIN32_NO_STATUS +#include "windef.h" +#include "winbase.h" +#include "winuser.h" +#include "winnls.h" +#include "winternl.h"
+#include "wine/test.h"
+static NTSTATUS (WINAPI *pRtlDosApplyFileIsolationRedirection_Ustr)(ULONG,
PUNICODE_STRING,
PUNICODE_STRING,
PUNICODE_STRING,
PUNICODE_STRING,
PUNICODE_STRING *,
PULONG,
PULONG,
PULONG);
+static const CHAR manifest_name[] = "winsxs.manifest";
+/* Note: '\n' is intentionally skipped. */ +static const CHAR manifest[] =
- "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>"
- "<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">"
- " <assemblyIdentity type="win32""
- " name="Wine.NtDll.Tests""
- " version="1.0.0.0""
- " processorArchitecture="*" />"
- " <dependency>"
- " <dependentAssembly>"
- " <assemblyIdentity type="win32""
- " name="microsoft.windows.common-controls""
- " version="6.0.0.0""
- " processorArchitecture="*""
- " publicKeyToken="6595b64144ccf1df""
- " language="*" />"
- " </dependentAssembly>"
- " </dependency>"
- "</assembly>";
+static void test_rtl_dos_apply_file_isolation_redirect(void) +{
- NTSTATUS status;
- WCHAR buffer[MAX_PATH];
- UNICODE_STRING original_name;
- UNICODE_STRING extension;
- UNICODE_STRING unknown1;
- UNICODE_STRING unknown2;
- UNICODE_STRING *path;
- static const WCHAR original_nameW[] = {'c','o','m','c','t','l','3','2',0};
- static const WCHAR extensionW[] = {'.','d','l','l',0};
- static const WCHAR emptyW[] = {'\0',0};
- RtlInitUnicodeString(&original_name, original_nameW);
- RtlInitUnicodeString(&extension, extensionW);
- RtlInitUnicodeString(&unknown2, emptyW);
- unknown1.Buffer = buffer;
- unknown1.Length = 0;
- unknown1.MaximumLength = MAX_PATH;
- status = pRtlDosApplyFileIsolationRedirection_Ustr(1, &original_name, &extension, &unknown1,
&unknown2, &path, NULL, NULL, NULL);
Where does this prototype come from and why do we need this function in a first place?
On Sunday, 6 November 2016 22:06:44 CET you wrote:
On 06.11.2016 4:54, Ivan Akulinchev wrote:
Signed-off-by: Ivan Akulinchev ivan.akulinchev@gmail.com
dlls/ntdll/tests/Makefile.in | 1 + dlls/ntdll/tests/sxs.c | 141 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 142 insertions(+) create mode 100644 dlls/ntdll/tests/sxs.c
diff --git a/dlls/ntdll/tests/Makefile.in b/dlls/ntdll/tests/Makefile.in index fc352dd..7fe1a70 100644 --- a/dlls/ntdll/tests/Makefile.in +++ b/dlls/ntdll/tests/Makefile.in @@ -21,5 +21,6 @@ C_SRCS = \
rtlbitmap.c \ rtlstr.c \ string.c \
sxs.c \
threadpool.c \ time.c
diff --git a/dlls/ntdll/tests/sxs.c b/dlls/ntdll/tests/sxs.c new file mode 100644 index 0000000..e04803b --- /dev/null +++ b/dlls/ntdll/tests/sxs.c @@ -0,0 +1,141 @@ +/*
- Tests for the Windows side-by-side assemblies.
- Copyright 2016 Ivan Akulinchev
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,
USA + */
+#include "ntstatus.h" +#define WIN32_NO_STATUS +#include "windef.h" +#include "winbase.h" +#include "winuser.h" +#include "winnls.h" +#include "winternl.h"
+#include "wine/test.h"
+static NTSTATUS (WINAPI *pRtlDosApplyFileIsolationRedirection_Ustr)(ULONG,
PUNICODE_STRING, + PUNICODE_STRING, + PUNICODE_STRING, + PUNICODE_STRING, + PUNICODE_STRING *, + PULONG, + PULONG,
PULONG); + +static const CHAR manifest_name[] = "winsxs.manifest";
+/* Note: '\n' is intentionally skipped. */ +static const CHAR manifest[] =
- "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>"
- "<assembly xmlns="urn:schemas-microsoft-com:asm.v1"
manifestVersion="1.0">" + " <assemblyIdentity type="win32""
- " name="Wine.NtDll.Tests""
- " version="1.0.0.0""
- " processorArchitecture="*" />"
- " <dependency>"
- " <dependentAssembly>"
- " <assemblyIdentity type="win32""
- " name="microsoft.windows.common-controls""
- " version="6.0.0.0""
- " processorArchitecture="*""
- " publicKeyToken="6595b64144ccf1df""
- " language="*" />"
- " </dependentAssembly>"
- " </dependency>"
- "</assembly>";
+static void test_rtl_dos_apply_file_isolation_redirect(void) +{
- NTSTATUS status;
- WCHAR buffer[MAX_PATH];
- UNICODE_STRING original_name;
- UNICODE_STRING extension;
- UNICODE_STRING unknown1;
- UNICODE_STRING unknown2;
- UNICODE_STRING *path;
- static const WCHAR original_nameW[] =
{'c','o','m','c','t','l','3','2',0}; + static const WCHAR extensionW[] = {'.','d','l','l',0};
- static const WCHAR emptyW[] = {'\0',0};
- RtlInitUnicodeString(&original_name, original_nameW);
- RtlInitUnicodeString(&extension, extensionW);
- RtlInitUnicodeString(&unknown2, emptyW);
- unknown1.Buffer = buffer;
- unknown1.Length = 0;
- unknown1.MaximumLength = MAX_PATH;
- status = pRtlDosApplyFileIsolationRedirection_Ustr(1, &original_name,
&extension, &unknown1, + &unknown2, &path, NULL, NULL, NULL);
Where does this prototype come from
I found this prototype on the Internet (just look for the name), and it is likely to be wrong.
and why do we need this function in a first place?
We needn't it in a first place, but we (probably) need to test every exported function, because if an application can import something (especially by name, not an ordinal number), this application can rely on it. For example, this function is required by some old viruses from the past decade (a computer museum of the future may want to use Wine for demonstration purposes).
Also it is a very important function used by Windows to support "Side-by-Side Assemblies", such as version 6 of comctl32. I can write a private mail with details to everybody, who wants to know how does it work, and who is NOT going to implement this function in Wine (to keep it clean from Microsoft's "trade secrets" and so on).
On 07.11.2016 0:27, Ivan Akulinchev wrote:
On Sunday, 6 November 2016 22:06:44 CET you wrote:
On 06.11.2016 4:54, Ivan Akulinchev wrote:
Signed-off-by: Ivan Akulinchev ivan.akulinchev@gmail.com
dlls/ntdll/tests/Makefile.in | 1 + dlls/ntdll/tests/sxs.c | 141 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 142 insertions(+) create mode 100644 dlls/ntdll/tests/sxs.c
diff --git a/dlls/ntdll/tests/Makefile.in b/dlls/ntdll/tests/Makefile.in index fc352dd..7fe1a70 100644 --- a/dlls/ntdll/tests/Makefile.in +++ b/dlls/ntdll/tests/Makefile.in @@ -21,5 +21,6 @@ C_SRCS = \
rtlbitmap.c \ rtlstr.c \ string.c \
sxs.c \
threadpool.c \ time.c
diff --git a/dlls/ntdll/tests/sxs.c b/dlls/ntdll/tests/sxs.c new file mode 100644 index 0000000..e04803b --- /dev/null +++ b/dlls/ntdll/tests/sxs.c @@ -0,0 +1,141 @@ +/*
- Tests for the Windows side-by-side assemblies.
- Copyright 2016 Ivan Akulinchev
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,
USA + */
+#include "ntstatus.h" +#define WIN32_NO_STATUS +#include "windef.h" +#include "winbase.h" +#include "winuser.h" +#include "winnls.h" +#include "winternl.h"
+#include "wine/test.h"
+static NTSTATUS (WINAPI *pRtlDosApplyFileIsolationRedirection_Ustr)(ULONG,
PUNICODE_STRING, + PUNICODE_STRING, + PUNICODE_STRING, + PUNICODE_STRING, + PUNICODE_STRING *, + PULONG, + PULONG,
PULONG); + +static const CHAR manifest_name[] = "winsxs.manifest";
+/* Note: '\n' is intentionally skipped. */ +static const CHAR manifest[] =
- "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>"
- "<assembly xmlns="urn:schemas-microsoft-com:asm.v1"
manifestVersion="1.0">" + " <assemblyIdentity type="win32""
- " name="Wine.NtDll.Tests""
- " version="1.0.0.0""
- " processorArchitecture="*" />"
- " <dependency>"
- " <dependentAssembly>"
- " <assemblyIdentity type="win32""
- " name="microsoft.windows.common-controls""
- " version="6.0.0.0""
- " processorArchitecture="*""
- " publicKeyToken="6595b64144ccf1df""
- " language="*" />"
- " </dependentAssembly>"
- " </dependency>"
- "</assembly>";
+static void test_rtl_dos_apply_file_isolation_redirect(void) +{
- NTSTATUS status;
- WCHAR buffer[MAX_PATH];
- UNICODE_STRING original_name;
- UNICODE_STRING extension;
- UNICODE_STRING unknown1;
- UNICODE_STRING unknown2;
- UNICODE_STRING *path;
- static const WCHAR original_nameW[] =
{'c','o','m','c','t','l','3','2',0}; + static const WCHAR extensionW[] = {'.','d','l','l',0};
- static const WCHAR emptyW[] = {'\0',0};
- RtlInitUnicodeString(&original_name, original_nameW);
- RtlInitUnicodeString(&extension, extensionW);
- RtlInitUnicodeString(&unknown2, emptyW);
- unknown1.Buffer = buffer;
- unknown1.Length = 0;
- unknown1.MaximumLength = MAX_PATH;
- status = pRtlDosApplyFileIsolationRedirection_Ustr(1, &original_name,
&extension, &unknown1, + &unknown2, &path, NULL, NULL, NULL);
Where does this prototype come from
I found this prototype on the Internet (just look for the name), and it is likely to be wrong.
and why do we need this function in a first place?
We needn't it in a first place, but we (probably) need to test every exported function, because if an application can import something (especially by name, not an ordinal number), this application can rely on it.
It's an unreasonable thing to do, unless you already have an application that needs such export.
For example, this
function is required by some old viruses from the past decade (a computer museum of the future may want to use Wine for demonstration purposes).
Also it is a very important function used by Windows to support "Side-by-Side Assemblies", such as version 6 of comctl32. I can write a private mail with details to everybody, who wants to know how does it work, and who is NOT going to implement this function in Wine (to keep it clean from Microsoft's "trade secrets" and so on).
That's implementation details that we don't have to duplicate.