mirror of
git://source.winehq.org/git/wine.git
synced 2024-09-15 01:34:47 +00:00
ntdll: Implement RtlSetUserFlagsHeap.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=53741
This commit is contained in:
parent
bba4fa0fbb
commit
fe3c5e93e2
|
@ -2361,15 +2361,12 @@ static void test_block_layout( HANDLE heap, DWORD global_flags, DWORD heap_flags
|
|||
SetLastError( 0xdeadbeef );
|
||||
ret = pRtlSetUserFlagsHeap( heap, 0, ptr0, 0, 0x1000 );
|
||||
ok( !ret, "RtlSetUserFlagsHeap succeeded\n" );
|
||||
todo_wine
|
||||
ok( GetLastError() == ERROR_INVALID_PARAMETER, "got error %lu\n", GetLastError() );
|
||||
SetLastError( 0xdeadbeef );
|
||||
ret = pRtlSetUserFlagsHeap( heap, 0, ptr0, 0x100, 0 );
|
||||
ok( !ret, "RtlSetUserFlagsHeap succeeded\n" );
|
||||
todo_wine
|
||||
ok( GetLastError() == ERROR_INVALID_PARAMETER, "got error %lu\n", GetLastError() );
|
||||
ret = pRtlSetUserFlagsHeap( heap, 0, ptr0, 0x400, 0x200 );
|
||||
todo_wine
|
||||
ok( ret, "RtlSetUserFlagsHeap failed, error %lu\n", GetLastError() );
|
||||
|
||||
tmp_ptr = NULL;
|
||||
|
@ -2377,7 +2374,6 @@ static void test_block_layout( HANDLE heap, DWORD global_flags, DWORD heap_flags
|
|||
ret = pRtlGetUserInfoHeap( heap, 0, ptr0, (void **)&tmp_ptr, &tmp_flags );
|
||||
ok( ret, "RtlGetUserInfoHeap failed, error %lu\n", GetLastError() );
|
||||
ok( tmp_ptr == (void *)0xdeadbeef, "got ptr %p\n", tmp_ptr );
|
||||
todo_wine
|
||||
ok( tmp_flags == 0xa00 || broken(tmp_flags == 0xc00) /* w1064v1507 */,
|
||||
"got flags %#lx\n", tmp_flags );
|
||||
|
||||
|
@ -2391,7 +2387,6 @@ static void test_block_layout( HANDLE heap, DWORD global_flags, DWORD heap_flags
|
|||
ret = pRtlGetUserInfoHeap( heap, 0, ptr0, (void **)&tmp_ptr, &tmp_flags );
|
||||
ok( ret, "RtlGetUserInfoHeap failed, error %lu\n", GetLastError() );
|
||||
ok( tmp_ptr == (void *)0xdeadbee0, "got ptr %p\n", tmp_ptr );
|
||||
todo_wine
|
||||
ok( tmp_flags == 0xa00 || broken(tmp_flags == 0xc00) /* w1064v1507 */,
|
||||
"got flags %#lx\n", tmp_flags );
|
||||
|
||||
|
|
|
@ -2093,6 +2093,32 @@ BOOLEAN WINAPI RtlSetUserValueHeap( HANDLE handle, ULONG flags, void *ptr, void
|
|||
*/
|
||||
BOOLEAN WINAPI RtlSetUserFlagsHeap( HANDLE handle, ULONG flags, void *ptr, ULONG clear, ULONG set )
|
||||
{
|
||||
FIXME( "handle %p, flags %#x, ptr %p, clear %#x, set %#x stub!\n", handle, flags, ptr, clear, set );
|
||||
return FALSE;
|
||||
struct block *block;
|
||||
BOOLEAN ret = FALSE;
|
||||
struct heap *heap;
|
||||
SUBHEAP *subheap;
|
||||
|
||||
TRACE( "handle %p, flags %#x, ptr %p, clear %#x, set %#x.\n", handle, flags, ptr, clear, set );
|
||||
|
||||
if ((clear | set) & ~(0xe00))
|
||||
{
|
||||
SetLastError( ERROR_INVALID_PARAMETER );
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (!(heap = unsafe_heap_from_handle( handle ))) return TRUE;
|
||||
|
||||
heap_lock( heap, flags );
|
||||
if (!(block = unsafe_block_from_ptr( heap, ptr, &subheap )))
|
||||
WARN( "Failed to find block %p in heap %p\n", ptr, handle );
|
||||
else if (!(block_get_flags( block ) & BLOCK_FLAG_USER_INFO))
|
||||
WARN( "Block %p wasn't allocated with user info\n", ptr );
|
||||
else
|
||||
{
|
||||
block_set_flags( block, BLOCK_USER_FLAGS( clear ), BLOCK_USER_FLAGS( set ) );
|
||||
ret = TRUE;
|
||||
}
|
||||
heap_unlock( heap, flags );
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue