Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
e0b5da7b
Commit
e0b5da7b
authored
Feb 10, 2020
by
Zebediah Figura
Committed by
Alexandre Julliard
Feb 11, 2020
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
setupapi/tests: Add some tests for COM self-registration.
Signed-off-by:
Zebediah Figura
<
zfigura@codeweavers.com
>
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
0df9cce2
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
147 additions
and
1 deletion
+147
-1
Makefile.in
dlls/setupapi/tests/Makefile.in
+5
-1
install.c
dlls/setupapi/tests/install.c
+90
-0
selfreg.c
dlls/setupapi/tests/selfreg.c
+50
-0
selfreg.spec
dlls/setupapi/tests/selfreg.spec
+2
-0
No files found.
dlls/setupapi/tests/Makefile.in
View file @
e0b5da7b
TESTDLL
=
setupapi.dll
IMPORTS
=
advapi32 cabinet setupapi shell32 uuid user32
IMPORTS
=
advapi32 cabinet ole32 setupapi shell32 uuid user32
selfreg_IMPORTS
=
uuid advapi32 ole32
SOURCES
=
\
coinst.c
\
...
...
@@ -11,6 +13,8 @@ SOURCES = \
misc.c
\
parser.c
\
query.c
\
selfreg.c
\
selfreg.spec
\
setupapi.rc
\
setupcab.c
\
stringtable.c
...
...
dlls/setupapi/tests/install.c
View file @
e0b5da7b
...
...
@@ -54,6 +54,24 @@ static char CURR_DIR[MAX_PATH];
* Helpers
*/
static
void
load_resource
(
const
char
*
name
,
const
char
*
filename
)
{
DWORD
written
;
HANDLE
file
;
HRSRC
res
;
void
*
ptr
;
file
=
CreateFileA
(
filename
,
GENERIC_READ
|
GENERIC_WRITE
,
0
,
NULL
,
CREATE_ALWAYS
,
0
,
0
);
ok
(
file
!=
INVALID_HANDLE_VALUE
,
"file creation failed, at %s, error %d
\n
"
,
filename
,
GetLastError
());
res
=
FindResourceA
(
NULL
,
name
,
"TESTDLL"
);
ok
(
res
!=
0
,
"couldn't find resource
\n
"
);
ptr
=
LockResource
(
LoadResource
(
GetModuleHandleA
(
NULL
),
res
));
WriteFile
(
file
,
ptr
,
SizeofResource
(
GetModuleHandleA
(
NULL
),
res
),
&
written
,
NULL
);
ok
(
written
==
SizeofResource
(
GetModuleHandleA
(
NULL
),
res
),
"couldn't write resource
\n
"
);
CloseHandle
(
file
);
}
static
void
create_inf_file
(
LPCSTR
filename
,
const
char
*
data
)
{
DWORD
res
;
...
...
@@ -2040,6 +2058,77 @@ static void test_start_copy(void)
delete_file
(
"dst/"
);
}
static
void
test_register_dlls
(
void
)
{
static
const
char
inf_data
[]
=
"[Version]
\n
"
"Signature=
\"
$Chicago$
\"\n
"
"[DefaultInstall]
\n
"
"RegisterDlls=register_section
\n
"
"UnregisterDlls=register_section
\n
"
"[register_section]
\n
"
"40000,,winetest_selfreg.dll,1
\n
"
;
void
*
context
=
SetupInitDefaultQueueCallbackEx
(
NULL
,
INVALID_HANDLE_VALUE
,
0
,
0
,
0
);
char
path
[
MAX_PATH
];
HRESULT
hr
;
HINF
hinf
;
BOOL
ret
;
HKEY
key
;
LONG
l
;
create_inf_file
(
"test.inf"
,
inf_data
);
sprintf
(
path
,
"%s
\\
test.inf"
,
CURR_DIR
);
hinf
=
SetupOpenInfFileA
(
path
,
NULL
,
INF_STYLE_WIN4
,
NULL
);
ok
(
hinf
!=
INVALID_HANDLE_VALUE
,
"Failed to open INF file, error %#x.
\n
"
,
GetLastError
());
load_resource
(
"selfreg.dll"
,
"winetest_selfreg.dll"
);
ret
=
SetupSetDirectoryIdA
(
hinf
,
40000
,
CURR_DIR
);
ok
(
ret
,
"Failed to set directory ID, error %u.
\n
"
,
GetLastError
());
RegDeleteKeyA
(
HKEY_CURRENT_USER
,
"winetest_setupapi_selfreg"
);
ret
=
SetupInstallFromInfSectionA
(
NULL
,
hinf
,
"DefaultInstall"
,
SPINST_REGSVR
,
NULL
,
"C:
\\
"
,
0
,
SetupDefaultQueueCallbackA
,
context
,
NULL
,
NULL
);
ok
(
ret
,
"Failed to install, error %#x.
\n
"
,
GetLastError
());
l
=
RegOpenKeyA
(
HKEY_CURRENT_USER
,
"winetest_setupapi_selfreg"
,
&
key
);
todo_wine
ok
(
!
l
,
"Got error %u.
\n
"
,
l
);
RegCloseKey
(
key
);
ret
=
SetupInstallFromInfSectionA
(
NULL
,
hinf
,
"DefaultInstall"
,
SPINST_UNREGSVR
,
NULL
,
"C:
\\
"
,
0
,
SetupDefaultQueueCallbackA
,
context
,
NULL
,
NULL
);
ok
(
ret
,
"Failed to install, error %#x.
\n
"
,
GetLastError
());
l
=
RegOpenKeyA
(
HKEY_CURRENT_USER
,
"winetest_setupapi_selfreg"
,
&
key
);
ok
(
l
==
ERROR_FILE_NOT_FOUND
,
"Got error %u.
\n
"
,
l
);
hr
=
CoInitializeEx
(
NULL
,
COINIT_MULTITHREADED
);
ok
(
hr
==
S_OK
,
"Got hr %#x.
\n
"
,
hr
);
ret
=
SetupInstallFromInfSectionA
(
NULL
,
hinf
,
"DefaultInstall"
,
SPINST_REGSVR
,
NULL
,
"C:
\\
"
,
0
,
SetupDefaultQueueCallbackA
,
context
,
NULL
,
NULL
);
ok
(
ret
,
"Failed to install, error %#x.
\n
"
,
GetLastError
());
l
=
RegOpenKeyA
(
HKEY_CURRENT_USER
,
"winetest_setupapi_selfreg"
,
&
key
);
ok
(
!
l
,
"Got error %u.
\n
"
,
l
);
RegCloseKey
(
key
);
ret
=
SetupInstallFromInfSectionA
(
NULL
,
hinf
,
"DefaultInstall"
,
SPINST_UNREGSVR
,
NULL
,
"C:
\\
"
,
0
,
SetupDefaultQueueCallbackA
,
context
,
NULL
,
NULL
);
ok
(
ret
,
"Failed to install, error %#x.
\n
"
,
GetLastError
());
l
=
RegOpenKeyA
(
HKEY_CURRENT_USER
,
"winetest_setupapi_selfreg"
,
&
key
);
ok
(
l
==
ERROR_FILE_NOT_FOUND
,
"Got error %u.
\n
"
,
l
);
CoUninitialize
();
SetupCloseInfFile
(
hinf
);
ret
=
DeleteFileA
(
"test.inf"
);
ok
(
ret
,
"Failed to delete INF file, error %u.
\n
"
,
GetLastError
());
ret
=
DeleteFileA
(
"winetest_selfreg.dll"
);
ok
(
ret
,
"Failed to delete test DLL, error %u.
\n
"
,
GetLastError
());
}
START_TEST
(
install
)
{
char
temp_path
[
MAX_PATH
],
prev_path
[
MAX_PATH
];
...
...
@@ -2069,6 +2158,7 @@ START_TEST(install)
test_close_queue
();
test_install_file
();
test_start_copy
();
test_register_dlls
();
UnhookWindowsHookEx
(
hhook
);
...
...
dlls/setupapi/tests/selfreg.c
0 → 100644
View file @
e0b5da7b
/*
* DLL for testing COM self-registration
*
* Copyright 2020 Zebediah Figura for CodeWeavers
*
* 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
*/
#define COBJMACROS
#include "msxml.h"
HRESULT
WINAPI
DllRegisterServer
(
void
)
{
IUnknown
*
unk
;
HKEY
key
;
if
(
CoCreateInstance
(
&
CLSID_XMLDocument
,
NULL
,
CLSCTX_INPROC_SERVER
,
&
IID_IUnknown
,
(
void
**
)
&
unk
)
==
S_OK
)
{
RegCreateKeyA
(
HKEY_CURRENT_USER
,
"winetest_setupapi_selfreg"
,
&
key
);
RegCloseKey
(
key
);
IUnknown_Release
(
unk
);
}
return
S_OK
;
}
HRESULT
WINAPI
DllUnregisterServer
(
void
)
{
IUnknown
*
unk
;
if
(
CoCreateInstance
(
&
CLSID_XMLDocument
,
NULL
,
CLSCTX_INPROC_SERVER
,
&
IID_IUnknown
,
(
void
**
)
&
unk
)
==
S_OK
)
{
RegDeleteKeyA
(
HKEY_CURRENT_USER
,
"winetest_setupapi_selfreg"
);
IUnknown_Release
(
unk
);
}
return
S_OK
;
}
dlls/setupapi/tests/selfreg.spec
0 → 100644
View file @
e0b5da7b
@ stdcall -private DllRegisterServer()
@ stdcall -private DllUnregisterServer()
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment