return LdrProcessRelocationBlockLongLong(Address, Count, TypeOffset, Delta);
}
-NTSTATUS
-NTAPI
-LdrLockLoaderLock(IN ULONG Flags,
- OUT PULONG Disposition OPTIONAL,
- OUT PULONG Cookie OPTIONAL)
-{
- NTSTATUS Status;
- BOOLEAN Ret;
- BOOLEAN CookieSet = FALSE;
-
- if ((Flags != 0x01) && (Flags != 0x02))
- return STATUS_INVALID_PARAMETER_1;
-
- if (!Cookie) return STATUS_INVALID_PARAMETER_3;
-
- /* Set some defaults for failure while verifying params */
- _SEH2_TRY
- {
- *Cookie = 0;
- CookieSet = TRUE;
- if (Disposition) *Disposition = 0;
- }
- _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
- {
- if (CookieSet)
- Status = STATUS_INVALID_PARAMETER_3;
- else
- Status = STATUS_INVALID_PARAMETER_2;
- }
- _SEH2_END;
-
- if (Flags == 0x01)
- {
- DPRINT1("Warning: Reporting errors with exception not supported yet!\n");
- RtlEnterCriticalSection(NtCurrentPeb()->LoaderLock);
- Status = STATUS_SUCCESS;
-
- }
- else
- {
- if (!Disposition) return STATUS_INVALID_PARAMETER_2;
-
- Ret = RtlTryEnterCriticalSection(NtCurrentPeb()->LoaderLock);
-
- if (Ret)
- *Disposition = 0x01;
- else
- *Disposition = 0x02;
-
- Status = STATUS_SUCCESS;
- }
-
- /* FIXME: Cookie is based on part of the thread id */
- *Cookie = (ULONG)NtCurrentTeb()->RealClientId.UniqueThread;
- return Status;
-}
-
-NTSTATUS
-NTAPI
-LdrUnlockLoaderLock(IN ULONG Flags,
- IN ULONG Cookie OPTIONAL)
-{
- if (Flags != 0x01)
- return STATUS_INVALID_PARAMETER_1;
-
- if (Cookie != (ULONG)NtCurrentTeb()->RealClientId.UniqueThread)
- return STATUS_INVALID_PARAMETER_2;
-
- RtlLeaveCriticalSection(NtCurrentPeb()->LoaderLock);
-
- return STATUS_SUCCESS;
-}
-
BOOLEAN
NTAPI
LdrUnloadAlternateResourceModule(IN PVOID BaseAddress)