- SEH-protect LsaClose, LsaDelete and LsaOpenPolicy.

- Move the code of LsaOpenPolicy into LsarOpenPolicy and make LsaOpenPolicy call LsarOpenPolicy.

svn path=/trunk/; revision=38078
This commit is contained in:
Eric Kohl 2008-12-14 13:16:16 +00:00
parent 1605d036fe
commit 41a958b128
2 changed files with 65 additions and 19 deletions

View file

@ -78,13 +78,21 @@ PLSAPR_SERVER_NAME_unbind(PLSAPR_SERVER_NAME pszSystemName,
NTSTATUS WINAPI NTSTATUS WINAPI
LsaClose(LSA_HANDLE ObjectHandle) LsaClose(LSA_HANDLE ObjectHandle)
{ {
NTSTATUS Status;
TRACE("LsaClose(0x%p) called\n", ObjectHandle); TRACE("LsaClose(0x%p) called\n", ObjectHandle);
/* This is our fake handle, don't go too much long way */ _SEH2_TRY
if (ObjectHandle == (LSA_HANDLE)0xcafe) {
return STATUS_SUCCESS; Status = LsarClose((PLSAPR_HANDLE)&ObjectHandle);
}
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{
Status = I_RpcMapWin32Status(RpcExceptionCode());
}
_SEH2_END;
return LsarClose((PLSAPR_HANDLE)&ObjectHandle); return Status;
} }
@ -94,9 +102,21 @@ LsaClose(LSA_HANDLE ObjectHandle)
NTSTATUS WINAPI NTSTATUS WINAPI
LsaDelete(LSA_HANDLE ObjectHandle) LsaDelete(LSA_HANDLE ObjectHandle)
{ {
NTSTATUS Status;
TRACE("LsaDelete(0x%p) called\n", ObjectHandle); TRACE("LsaDelete(0x%p) called\n", ObjectHandle);
return LsarDelete((LSAPR_HANDLE)ObjectHandle); _SEH2_TRY
{
Status = LsarDelete((LSAPR_HANDLE)ObjectHandle);
}
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{
Status = I_RpcMapWin32Status(RpcExceptionCode());
}
_SEH2_END;
return Status;
} }
@ -365,14 +385,33 @@ LsaOpenPolicy(
IN ACCESS_MASK DesiredAccess, IN ACCESS_MASK DesiredAccess,
IN OUT PLSA_HANDLE PolicyHandle) IN OUT PLSA_HANDLE PolicyHandle)
{ {
TRACE("(%s,%p,0x%08x,%p) stub\n", NTSTATUS Status;
TRACE("LsaOpenPolicy (%s,%p,0x%08x,%p)\n",
SystemName?debugstr_w(SystemName->Buffer):"(null)", SystemName?debugstr_w(SystemName->Buffer):"(null)",
ObjectAttributes, DesiredAccess, PolicyHandle); ObjectAttributes, DesiredAccess, PolicyHandle);
if(PolicyHandle) *PolicyHandle = (LSA_HANDLE)0xcafe; _SEH2_TRY
return STATUS_SUCCESS; {
*PolicyHandle = NULL;
Status = LsarOpenPolicy(SystemName->Buffer,
(PLSAPR_OBJECT_ATTRIBUTES)ObjectAttributes,
DesiredAccess,
PolicyHandle);
}
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{
Status = I_RpcMapWin32Status(RpcExceptionCode());
}
_SEH2_END;
TRACE("LsaOpenPolicy() done (Status: 0x%08lx)\n", Status);
return Status;
} }
/* /*
* @unimplemented * @unimplemented
*/ */

View file

@ -162,8 +162,8 @@ void __RPC_USER LSAPR_HANDLE_rundown(LSAPR_HANDLE hHandle)
/* Function 0 */ /* Function 0 */
NTSTATUS LsarClose( NTSTATUS
LSAPR_HANDLE *ObjectHandle) LsarClose(LSAPR_HANDLE *ObjectHandle)
{ {
#if 0 #if 0
PLSAR_POLICY_HANDLE Policy = NULL; PLSAR_POLICY_HANDLE Policy = NULL;
@ -183,14 +183,24 @@ NTSTATUS LsarClose(
return Status; return Status;
#endif #endif
UNIMPLEMENTED; NTSTATUS Status = STATUS_NOT_IMPLEMENTED;
return STATUS_NOT_IMPLEMENTED;
TRACE("LsarClose called!\n");
/* This is our fake handle, don't go too much long way */
if (*ObjectHandle == (LSA_HANDLE)0xcafe)
Status = STATUS_SUCCESS;
TRACE("LsarClose done (Status: 0x%08lx)!\n", Status);
return Status;
} }
/* Function 1 */ /* Function 1 */
NTSTATUS LsarDelete( NTSTATUS
LSAPR_HANDLE ObjectHandle) LsarDelete(LSAPR_HANDLE ObjectHandle)
{ {
/* Deprecated */ /* Deprecated */
return STATUS_NOT_SUPPORTED; return STATUS_NOT_SUPPORTED;
@ -252,16 +262,13 @@ NTSTATUS LsarOpenPolicy(
ACCESS_MASK DesiredAccess, ACCESS_MASK DesiredAccess,
LSAPR_HANDLE *PolicyHandle) LSAPR_HANDLE *PolicyHandle)
{ {
ERR("LsarOpenPolicy called!\n"); TRACE("LsarOpenPolicy called!\n");
*PolicyHandle = (LSAPR_HANDLE)0xcafe; *PolicyHandle = (LSAPR_HANDLE)0xcafe;
ERR("LsarOpenPolicy done!\n"); TRACE("LsarOpenPolicy done!\n");
return STATUS_SUCCESS; return STATUS_SUCCESS;
// UNIMPLEMENTED;
// return STATUS_NOT_IMPLEMENTED;
} }