kernel32: Move process/thread attribute list functions to kernelbase.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
09f588ee69
commit
d8582d97a0
|
@ -365,7 +365,7 @@
|
||||||
# @ stub DeleteFileTransactedA
|
# @ stub DeleteFileTransactedA
|
||||||
# @ stub DeleteFileTransactedW
|
# @ stub DeleteFileTransactedW
|
||||||
@ stdcall DeleteFileW(wstr)
|
@ stdcall DeleteFileW(wstr)
|
||||||
@ stdcall DeleteProcThreadAttributeList(ptr)
|
@ stdcall -import DeleteProcThreadAttributeList(ptr)
|
||||||
# @ stub DisableThreadProfiling
|
# @ stub DisableThreadProfiling
|
||||||
@ stdcall DisassociateCurrentThreadFromCallback(ptr) ntdll.TpDisassociateCallback
|
@ stdcall DisassociateCurrentThreadFromCallback(ptr) ntdll.TpDisassociateCallback
|
||||||
@ stdcall DeleteTimerQueue(long)
|
@ stdcall DeleteTimerQueue(long)
|
||||||
|
@ -949,7 +949,7 @@
|
||||||
@ stdcall InitializeCriticalSection(ptr) ntdll.RtlInitializeCriticalSection
|
@ stdcall InitializeCriticalSection(ptr) ntdll.RtlInitializeCriticalSection
|
||||||
@ stdcall -import InitializeCriticalSectionAndSpinCount(ptr long)
|
@ stdcall -import InitializeCriticalSectionAndSpinCount(ptr long)
|
||||||
@ stdcall -import InitializeCriticalSectionEx(ptr long long)
|
@ stdcall -import InitializeCriticalSectionEx(ptr long long)
|
||||||
@ stdcall InitializeProcThreadAttributeList(ptr long long ptr)
|
@ stdcall -import InitializeProcThreadAttributeList(ptr long long ptr)
|
||||||
@ stdcall InitializeSListHead(ptr) ntdll.RtlInitializeSListHead
|
@ stdcall InitializeSListHead(ptr) ntdll.RtlInitializeSListHead
|
||||||
@ stdcall InitializeSRWLock(ptr) ntdll.RtlInitializeSRWLock
|
@ stdcall InitializeSRWLock(ptr) ntdll.RtlInitializeSRWLock
|
||||||
@ stdcall -arch=i386 InterlockedCompareExchange (ptr long long)
|
@ stdcall -arch=i386 InterlockedCompareExchange (ptr long long)
|
||||||
|
@ -1543,7 +1543,7 @@
|
||||||
@ stdcall UnregisterWait(long)
|
@ stdcall UnregisterWait(long)
|
||||||
@ stdcall -import UnregisterWaitEx(long long)
|
@ stdcall -import UnregisterWaitEx(long long)
|
||||||
# @ stub UpdateCalendarDayOfWeek
|
# @ stub UpdateCalendarDayOfWeek
|
||||||
@ stdcall UpdateProcThreadAttribute(ptr long long ptr long ptr ptr)
|
@ stdcall -import UpdateProcThreadAttribute(ptr long long ptr long ptr ptr)
|
||||||
@ stdcall UpdateResourceA(long str str long ptr long)
|
@ stdcall UpdateResourceA(long str str long ptr long)
|
||||||
@ stdcall UpdateResourceW(long wstr wstr long ptr long)
|
@ stdcall UpdateResourceW(long wstr wstr long ptr long)
|
||||||
@ stub VDMConsoleOperation
|
@ stub VDMConsoleOperation
|
||||||
|
|
|
@ -4113,135 +4113,6 @@ HRESULT WINAPI UnregisterApplicationRestart(void)
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct proc_thread_attr
|
|
||||||
{
|
|
||||||
DWORD_PTR attr;
|
|
||||||
SIZE_T size;
|
|
||||||
void *value;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct _PROC_THREAD_ATTRIBUTE_LIST
|
|
||||||
{
|
|
||||||
DWORD mask; /* bitmask of items in list */
|
|
||||||
DWORD size; /* max number of items in list */
|
|
||||||
DWORD count; /* number of items in list */
|
|
||||||
DWORD pad;
|
|
||||||
DWORD_PTR unk;
|
|
||||||
struct proc_thread_attr attrs[1];
|
|
||||||
};
|
|
||||||
|
|
||||||
/***********************************************************************
|
|
||||||
* InitializeProcThreadAttributeList (KERNEL32.@)
|
|
||||||
*/
|
|
||||||
BOOL WINAPI InitializeProcThreadAttributeList(struct _PROC_THREAD_ATTRIBUTE_LIST *list,
|
|
||||||
DWORD count, DWORD flags, SIZE_T *size)
|
|
||||||
{
|
|
||||||
SIZE_T needed;
|
|
||||||
BOOL ret = FALSE;
|
|
||||||
|
|
||||||
TRACE("(%p %d %x %p)\n", list, count, flags, size);
|
|
||||||
|
|
||||||
needed = FIELD_OFFSET(struct _PROC_THREAD_ATTRIBUTE_LIST, attrs[count]);
|
|
||||||
if (list && *size >= needed)
|
|
||||||
{
|
|
||||||
list->mask = 0;
|
|
||||||
list->size = count;
|
|
||||||
list->count = 0;
|
|
||||||
list->unk = 0;
|
|
||||||
ret = TRUE;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
SetLastError(ERROR_INSUFFICIENT_BUFFER);
|
|
||||||
|
|
||||||
*size = needed;
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/***********************************************************************
|
|
||||||
* UpdateProcThreadAttribute (KERNEL32.@)
|
|
||||||
*/
|
|
||||||
BOOL WINAPI UpdateProcThreadAttribute(struct _PROC_THREAD_ATTRIBUTE_LIST *list,
|
|
||||||
DWORD flags, DWORD_PTR attr, void *value, SIZE_T size,
|
|
||||||
void *prev_ret, SIZE_T *size_ret)
|
|
||||||
{
|
|
||||||
DWORD mask;
|
|
||||||
struct proc_thread_attr *entry;
|
|
||||||
|
|
||||||
TRACE("(%p %x %08lx %p %ld %p %p)\n", list, flags, attr, value, size, prev_ret, size_ret);
|
|
||||||
|
|
||||||
if (list->count >= list->size)
|
|
||||||
{
|
|
||||||
SetLastError(ERROR_GEN_FAILURE);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (attr)
|
|
||||||
{
|
|
||||||
case PROC_THREAD_ATTRIBUTE_PARENT_PROCESS:
|
|
||||||
if (size != sizeof(HANDLE))
|
|
||||||
{
|
|
||||||
SetLastError(ERROR_BAD_LENGTH);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PROC_THREAD_ATTRIBUTE_HANDLE_LIST:
|
|
||||||
if ((size / sizeof(HANDLE)) * sizeof(HANDLE) != size)
|
|
||||||
{
|
|
||||||
SetLastError(ERROR_BAD_LENGTH);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PROC_THREAD_ATTRIBUTE_IDEAL_PROCESSOR:
|
|
||||||
if (size != sizeof(PROCESSOR_NUMBER))
|
|
||||||
{
|
|
||||||
SetLastError(ERROR_BAD_LENGTH);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PROC_THREAD_ATTRIBUTE_CHILD_PROCESS_POLICY:
|
|
||||||
if (size != sizeof(DWORD) && size != sizeof(DWORD64))
|
|
||||||
{
|
|
||||||
SetLastError(ERROR_BAD_LENGTH);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PROC_THREAD_ATTRIBUTE_MITIGATION_POLICY:
|
|
||||||
if (size != sizeof(DWORD) && size != sizeof(DWORD64) && size != sizeof(DWORD64) * 2)
|
|
||||||
{
|
|
||||||
SetLastError(ERROR_BAD_LENGTH);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
SetLastError(ERROR_NOT_SUPPORTED);
|
|
||||||
FIXME("Unhandled attribute number %lu\n", attr & PROC_THREAD_ATTRIBUTE_NUMBER);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
mask = 1 << (attr & PROC_THREAD_ATTRIBUTE_NUMBER);
|
|
||||||
|
|
||||||
if (list->mask & mask)
|
|
||||||
{
|
|
||||||
SetLastError(ERROR_OBJECT_NAME_EXISTS);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
list->mask |= mask;
|
|
||||||
|
|
||||||
entry = list->attrs + list->count;
|
|
||||||
entry->attr = attr;
|
|
||||||
entry->size = size;
|
|
||||||
entry->value = value;
|
|
||||||
list->count++;
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* CreateUmsCompletionList (KERNEL32.@)
|
* CreateUmsCompletionList (KERNEL32.@)
|
||||||
*/
|
*/
|
||||||
|
@ -4262,14 +4133,6 @@ BOOL WINAPI CreateUmsThreadContext(PUMS_CONTEXT *ctx)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
|
||||||
* DeleteProcThreadAttributeList (KERNEL32.@)
|
|
||||||
*/
|
|
||||||
void WINAPI DeleteProcThreadAttributeList(struct _PROC_THREAD_ATTRIBUTE_LIST *list)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* DeleteUmsCompletionList (KERNEL32.@)
|
* DeleteUmsCompletionList (KERNEL32.@)
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -252,7 +252,7 @@
|
||||||
@ stdcall DeleteFiber(ptr)
|
@ stdcall DeleteFiber(ptr)
|
||||||
@ stdcall DeleteFileA(str) kernel32.DeleteFileA
|
@ stdcall DeleteFileA(str) kernel32.DeleteFileA
|
||||||
@ stdcall DeleteFileW(wstr) kernel32.DeleteFileW
|
@ stdcall DeleteFileW(wstr) kernel32.DeleteFileW
|
||||||
@ stdcall DeleteProcThreadAttributeList(ptr) kernel32.DeleteProcThreadAttributeList
|
@ stdcall DeleteProcThreadAttributeList(ptr)
|
||||||
# @ stub DeleteStateAtomValue
|
# @ stub DeleteStateAtomValue
|
||||||
# @ stub DeleteStateContainer
|
# @ stub DeleteStateContainer
|
||||||
# @ stub DeleteStateContainerValue
|
# @ stub DeleteStateContainerValue
|
||||||
|
@ -805,7 +805,7 @@
|
||||||
@ stdcall InitializeCriticalSectionAndSpinCount(ptr long)
|
@ stdcall InitializeCriticalSectionAndSpinCount(ptr long)
|
||||||
@ stdcall InitializeCriticalSectionEx(ptr long long)
|
@ stdcall InitializeCriticalSectionEx(ptr long long)
|
||||||
# @ stub InitializeEnclave
|
# @ stub InitializeEnclave
|
||||||
@ stdcall InitializeProcThreadAttributeList(ptr long long ptr) kernel32.InitializeProcThreadAttributeList
|
@ stdcall InitializeProcThreadAttributeList(ptr long long ptr)
|
||||||
# @ stub InitializeProcessForWsWatch
|
# @ stub InitializeProcessForWsWatch
|
||||||
@ stdcall InitializeSListHead(ptr) ntdll.RtlInitializeSListHead
|
@ stdcall InitializeSListHead(ptr) ntdll.RtlInitializeSListHead
|
||||||
@ stdcall InitializeSRWLock(ptr) ntdll.RtlInitializeSRWLock
|
@ stdcall InitializeSRWLock(ptr) ntdll.RtlInitializeSRWLock
|
||||||
|
@ -1627,7 +1627,7 @@
|
||||||
# @ stub UnsubscribeStateChangeNotification
|
# @ stub UnsubscribeStateChangeNotification
|
||||||
# @ stub UpdatePackageStatus
|
# @ stub UpdatePackageStatus
|
||||||
# @ stub UpdatePackageStatusForUser
|
# @ stub UpdatePackageStatusForUser
|
||||||
@ stdcall UpdateProcThreadAttribute(ptr long long ptr long ptr ptr) kernel32.UpdateProcThreadAttribute
|
@ stdcall UpdateProcThreadAttribute(ptr long long ptr long ptr ptr)
|
||||||
@ stdcall UrlApplySchemeA(str ptr ptr long)
|
@ stdcall UrlApplySchemeA(str ptr ptr long)
|
||||||
@ stdcall UrlApplySchemeW(wstr ptr ptr long)
|
@ stdcall UrlApplySchemeW(wstr ptr ptr long)
|
||||||
@ stdcall UrlCanonicalizeA(str ptr ptr long)
|
@ stdcall UrlCanonicalizeA(str ptr ptr long)
|
||||||
|
|
|
@ -344,3 +344,144 @@ BOOL WINAPI DECLSPEC_HOTPATCH TerminateProcess( HANDLE handle, DWORD exit_code )
|
||||||
}
|
}
|
||||||
return set_ntstatus( NtTerminateProcess( handle, exit_code ));
|
return set_ntstatus( NtTerminateProcess( handle, exit_code ));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* Process/thread attribute lists
|
||||||
|
***********************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
struct proc_thread_attr
|
||||||
|
{
|
||||||
|
DWORD_PTR attr;
|
||||||
|
SIZE_T size;
|
||||||
|
void *value;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct _PROC_THREAD_ATTRIBUTE_LIST
|
||||||
|
{
|
||||||
|
DWORD mask; /* bitmask of items in list */
|
||||||
|
DWORD size; /* max number of items in list */
|
||||||
|
DWORD count; /* number of items in list */
|
||||||
|
DWORD pad;
|
||||||
|
DWORD_PTR unk;
|
||||||
|
struct proc_thread_attr attrs[1];
|
||||||
|
};
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* InitializeProcThreadAttributeList (kernelbase.@)
|
||||||
|
*/
|
||||||
|
BOOL WINAPI DECLSPEC_HOTPATCH InitializeProcThreadAttributeList( struct _PROC_THREAD_ATTRIBUTE_LIST *list,
|
||||||
|
DWORD count, DWORD flags, SIZE_T *size )
|
||||||
|
{
|
||||||
|
SIZE_T needed;
|
||||||
|
BOOL ret = FALSE;
|
||||||
|
|
||||||
|
TRACE( "(%p %d %x %p)\n", list, count, flags, size );
|
||||||
|
|
||||||
|
needed = FIELD_OFFSET( struct _PROC_THREAD_ATTRIBUTE_LIST, attrs[count] );
|
||||||
|
if (list && *size >= needed)
|
||||||
|
{
|
||||||
|
list->mask = 0;
|
||||||
|
list->size = count;
|
||||||
|
list->count = 0;
|
||||||
|
list->unk = 0;
|
||||||
|
ret = TRUE;
|
||||||
|
}
|
||||||
|
else SetLastError( ERROR_INSUFFICIENT_BUFFER );
|
||||||
|
|
||||||
|
*size = needed;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* UpdateProcThreadAttribute (kernelbase.@)
|
||||||
|
*/
|
||||||
|
BOOL WINAPI DECLSPEC_HOTPATCH UpdateProcThreadAttribute( struct _PROC_THREAD_ATTRIBUTE_LIST *list,
|
||||||
|
DWORD flags, DWORD_PTR attr, void *value,
|
||||||
|
SIZE_T size, void *prev_ret, SIZE_T *size_ret )
|
||||||
|
{
|
||||||
|
DWORD mask;
|
||||||
|
struct proc_thread_attr *entry;
|
||||||
|
|
||||||
|
TRACE( "(%p %x %08lx %p %ld %p %p)\n", list, flags, attr, value, size, prev_ret, size_ret );
|
||||||
|
|
||||||
|
if (list->count >= list->size)
|
||||||
|
{
|
||||||
|
SetLastError( ERROR_GEN_FAILURE );
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (attr)
|
||||||
|
{
|
||||||
|
case PROC_THREAD_ATTRIBUTE_PARENT_PROCESS:
|
||||||
|
if (size != sizeof(HANDLE))
|
||||||
|
{
|
||||||
|
SetLastError( ERROR_BAD_LENGTH );
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PROC_THREAD_ATTRIBUTE_HANDLE_LIST:
|
||||||
|
if ((size / sizeof(HANDLE)) * sizeof(HANDLE) != size)
|
||||||
|
{
|
||||||
|
SetLastError( ERROR_BAD_LENGTH );
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PROC_THREAD_ATTRIBUTE_IDEAL_PROCESSOR:
|
||||||
|
if (size != sizeof(PROCESSOR_NUMBER))
|
||||||
|
{
|
||||||
|
SetLastError( ERROR_BAD_LENGTH );
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PROC_THREAD_ATTRIBUTE_CHILD_PROCESS_POLICY:
|
||||||
|
if (size != sizeof(DWORD) && size != sizeof(DWORD64))
|
||||||
|
{
|
||||||
|
SetLastError( ERROR_BAD_LENGTH );
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PROC_THREAD_ATTRIBUTE_MITIGATION_POLICY:
|
||||||
|
if (size != sizeof(DWORD) && size != sizeof(DWORD64) && size != sizeof(DWORD64) * 2)
|
||||||
|
{
|
||||||
|
SetLastError( ERROR_BAD_LENGTH );
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
SetLastError( ERROR_NOT_SUPPORTED );
|
||||||
|
FIXME( "Unhandled attribute %lu\n", attr & PROC_THREAD_ATTRIBUTE_NUMBER );
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
mask = 1 << (attr & PROC_THREAD_ATTRIBUTE_NUMBER);
|
||||||
|
if (list->mask & mask)
|
||||||
|
{
|
||||||
|
SetLastError( ERROR_OBJECT_NAME_EXISTS );
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
list->mask |= mask;
|
||||||
|
|
||||||
|
entry = list->attrs + list->count;
|
||||||
|
entry->attr = attr;
|
||||||
|
entry->size = size;
|
||||||
|
entry->value = value;
|
||||||
|
list->count++;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* DeleteProcThreadAttributeList (kernelbase.@)
|
||||||
|
*/
|
||||||
|
void WINAPI DECLSPEC_HOTPATCH DeleteProcThreadAttributeList( struct _PROC_THREAD_ATTRIBUTE_LIST *list )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue