SmKmStoreHelperWaitForCommand
NTSTATUS __stdcall SmKmStoreHelperWaitForCommand(
_SMKM_STORE_HELPER *Helper,
_SMKM_STORE_HELPER_PARAMS *Results,
_LARGE_INTEGER *Timeout,
UINT64 CancelOnTimeout){
int v4;
_KEVENT *v5;
NTSTATUS v9;
_SMKM_STORE_HELPER v10;
signed __int32 v12;
v4 = CancelOnTimeout;
v5 = (_KEVENT *)(Helper + 8);
while( 1 )
{
v9 = KeWaitForSingleObject((UINT64)v5, 0, 0, 0, (INT64)Timeout);
if( !v9 )
break;
if( !v4 )
return v9;
v12 = Helper[14];
if( (v12 & 1) == 0 && (_InterlockedCompareExchange(Helper + 14, v12 | 2, v12) & 1) == 0 )
return -1073741536;
}
KeResetEvent(v5);
if( Results )
{
*(_OWORD *)Results = *((_OWORD *)Helper + 4);
*((_OWORD *)Results + 1) = *((_OWORD *)Helper + 5);
*((_OWORD *)Results + 2) = *((_OWORD *)Helper + 6);
}
v10 = Helper[14];
Helper[14] = 0;
return(v10 & 2) != 0 ? 0xC0000120 : 0;
}Referenced by:
SMKM_STORE::SmStHelperSendCommand
SmKmStoreHelperCheckWaitCommand