mirror of
git://source.winehq.org/git/wine.git
synced 2024-10-06 08:54:05 +00:00
kernelbase: Add CreateFileMappingFromApp().
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
This commit is contained in:
parent
40d0e55d4c
commit
3ede82e2a8
|
@ -190,7 +190,7 @@
|
|||
@ stdcall CreateFiberEx(long long long ptr ptr)
|
||||
@ stdcall CreateFile2(wstr long long long ptr)
|
||||
@ stdcall CreateFileA(str long long ptr long long long)
|
||||
# @ stub CreateFileMappingFromApp
|
||||
@ stdcall CreateFileMappingFromApp(long ptr long int64 wstr)
|
||||
@ stdcall CreateFileMappingNumaW(long ptr long long long wstr long)
|
||||
@ stdcall CreateFileMappingW(long ptr long long long wstr)
|
||||
@ stdcall CreateFileW(wstr long long ptr long long long)
|
||||
|
|
|
@ -879,7 +879,6 @@ BOOL WINAPI DECLSPEC_HOTPATCH InitializeCriticalSectionEx( CRITICAL_SECTION *cri
|
|||
* File mappings
|
||||
***********************************************************************/
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* CreateFileMappingW (kernelbase.@)
|
||||
*/
|
||||
|
@ -947,6 +946,15 @@ HANDLE WINAPI DECLSPEC_HOTPATCH CreateFileMappingW( HANDLE file, LPSECURITY_ATTR
|
|||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* CreateFileMappingFromApp (kernelbase.@)
|
||||
*/
|
||||
HANDLE WINAPI DECLSPEC_HOTPATCH CreateFileMappingFromApp( HANDLE file, LPSECURITY_ATTRIBUTES sa, ULONG protect,
|
||||
ULONG64 size, LPCWSTR name )
|
||||
{
|
||||
return CreateFileMappingW( file, sa, protect, size << 32, size, name );
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* OpenFileMappingW (kernelbase.@)
|
||||
*/
|
||||
|
|
|
@ -30,6 +30,8 @@
|
|||
|
||||
#include "wine/test.h"
|
||||
|
||||
static NTSTATUS (WINAPI *pNtQueryObject)(HANDLE,OBJECT_INFORMATION_CLASS,PVOID,ULONG,PULONG);
|
||||
|
||||
static BOOL (WINAPI *pCompareObjectHandles)(HANDLE, HANDLE);
|
||||
static LPVOID (WINAPI *pMapViewOfFile3)(HANDLE, HANDLE, PVOID, ULONG64 offset, SIZE_T size,
|
||||
ULONG, ULONG, MEM_EXTENDED_PARAMETER *, ULONG);
|
||||
|
@ -37,6 +39,7 @@ static LPVOID (WINAPI *pVirtualAlloc2)(HANDLE, void *, SIZE_T, DWORD, DWORD, MEM
|
|||
static LPVOID (WINAPI *pVirtualAlloc2FromApp)(HANDLE, void *, SIZE_T, DWORD, DWORD, MEM_EXTENDED_PARAMETER *, ULONG);
|
||||
static PVOID (WINAPI *pVirtualAllocFromApp)(PVOID, SIZE_T, DWORD, DWORD);
|
||||
static HANDLE (WINAPI *pOpenFileMappingFromApp)( ULONG, BOOL, LPCWSTR);
|
||||
static HANDLE (WINAPI *pCreateFileMappingFromApp)(HANDLE, PSECURITY_ATTRIBUTES, ULONG, ULONG64, PCWSTR);
|
||||
|
||||
static void test_CompareObjectHandles(void)
|
||||
{
|
||||
|
@ -327,7 +330,10 @@ static void test_VirtualAlloc2FromApp(void)
|
|||
|
||||
static void test_OpenFileMappingFromApp(void)
|
||||
{
|
||||
OBJECT_BASIC_INFORMATION info;
|
||||
HANDLE file, mapping;
|
||||
NTSTATUS status;
|
||||
ULONG length;
|
||||
|
||||
if (!pOpenFileMappingFromApp)
|
||||
{
|
||||
|
@ -340,26 +346,62 @@ static void test_OpenFileMappingFromApp(void)
|
|||
|
||||
mapping = pOpenFileMappingFromApp(FILE_MAP_READ, FALSE, L"foo");
|
||||
ok(!!mapping, "Failed to open a mapping.\n");
|
||||
status = pNtQueryObject(mapping, ObjectBasicInformation, &info, sizeof(info), &length);
|
||||
ok(!status, "Failed to get object information.\n");
|
||||
ok(info.GrantedAccess == SECTION_MAP_READ, "Unexpected access mask %#lx.\n", info.GrantedAccess);
|
||||
CloseHandle(mapping);
|
||||
|
||||
mapping = pOpenFileMappingFromApp(FILE_MAP_EXECUTE, FALSE, L"foo");
|
||||
ok(!!mapping, "Failed to open a mapping.\n");
|
||||
status = pNtQueryObject(mapping, ObjectBasicInformation, &info, sizeof(info), &length);
|
||||
ok(!status, "Failed to get object information.\n");
|
||||
todo_wine
|
||||
ok(info.GrantedAccess == SECTION_MAP_EXECUTE, "Unexpected access mask %#lx.\n", info.GrantedAccess);
|
||||
CloseHandle(mapping);
|
||||
|
||||
CloseHandle(file);
|
||||
}
|
||||
|
||||
static void test_CreateFileMappingFromApp(void)
|
||||
{
|
||||
OBJECT_BASIC_INFORMATION info;
|
||||
NTSTATUS status;
|
||||
ULONG length;
|
||||
HANDLE file;
|
||||
|
||||
if (!pCreateFileMappingFromApp)
|
||||
{
|
||||
win_skip("CreateFileMappingFromApp is not available.\n");
|
||||
return;
|
||||
}
|
||||
|
||||
file = pCreateFileMappingFromApp(INVALID_HANDLE_VALUE, NULL, PAGE_EXECUTE_READWRITE, 1024, L"foo");
|
||||
ok(!!file || broken(!file) /* Win8 */, "Failed to create a mapping, error %lu.\n", GetLastError());
|
||||
if (!file) return;
|
||||
|
||||
status = pNtQueryObject(file, ObjectBasicInformation, &info, sizeof(info), &length);
|
||||
ok(!status, "Failed to get object information.\n");
|
||||
ok(info.GrantedAccess & SECTION_MAP_EXECUTE, "Unexpected access mask %#lx.\n", info.GrantedAccess);
|
||||
|
||||
CloseHandle(file);
|
||||
}
|
||||
|
||||
static void init_funcs(void)
|
||||
{
|
||||
HMODULE hmod = GetModuleHandleA("kernelbase.dll");
|
||||
|
||||
#define X(f) { p##f = (void*)GetProcAddress(hmod, #f); }
|
||||
X(CompareObjectHandles);
|
||||
X(CreateFileMappingFromApp);
|
||||
X(MapViewOfFile3);
|
||||
X(OpenFileMappingFromApp);
|
||||
X(VirtualAlloc2);
|
||||
X(VirtualAlloc2FromApp);
|
||||
X(VirtualAllocFromApp);
|
||||
|
||||
hmod = GetModuleHandleA("ntdll.dll");
|
||||
|
||||
X(NtQueryObject);
|
||||
#undef X
|
||||
}
|
||||
|
||||
|
@ -373,4 +415,5 @@ START_TEST(process)
|
|||
test_VirtualAllocFromApp();
|
||||
test_VirtualAlloc2FromApp();
|
||||
test_OpenFileMappingFromApp();
|
||||
test_CreateFileMappingFromApp();
|
||||
}
|
||||
|
|
|
@ -1876,6 +1876,7 @@ WINBASEAPI HANDLE WINAPI CreateFileW(LPCWSTR,DWORD,DWORD,LPSECURITY_ATTRIBU
|
|||
WINBASEAPI HANDLE WINAPI CreateFileMappingA(HANDLE,LPSECURITY_ATTRIBUTES,DWORD,DWORD,DWORD,LPCSTR);
|
||||
WINBASEAPI HANDLE WINAPI CreateFileMappingW(HANDLE,LPSECURITY_ATTRIBUTES,DWORD,DWORD,DWORD,LPCWSTR);
|
||||
#define CreateFileMapping WINELIB_NAME_AW(CreateFileMapping)
|
||||
WINBASEAPI HANDLE WINAPI CreateFileMappingFromApp(HANDLE,PSECURITY_ATTRIBUTES,ULONG,ULONG64,PCWSTR);
|
||||
WINBASEAPI HANDLE WINAPI CreateIoCompletionPort(HANDLE,HANDLE,ULONG_PTR,DWORD);
|
||||
WINBASEAPI HANDLE WINAPI CreateJobObjectA(LPSECURITY_ATTRIBUTES,LPCSTR);
|
||||
WINBASEAPI HANDLE WINAPI CreateJobObjectW(LPSECURITY_ATTRIBUTES,LPCWSTR);
|
||||
|
|
Loading…
Reference in a new issue