Fetching token handle in FastIoQueryOpen() occasionally crashes system.

I’ve been recently testing remote access to my filter driver and seem to
occasionally get crashes in FastIoQueryOpen() when fetching a token handle in
order to get the user’s SID. The code snippet and SoftICE stack trace follow:

currentProcessId = PsGetCurrentProcessId();

if (currentProcessId != 0) // Check to for Idle process
{
SeCaptureSubjectContext(&subjectContext);

if (subjectContext.ClientToken != NULL)
accessToken = subjectContext.ClientToken;

else if (subjectContext.PrimaryToken != NULL)
accessToken = subjectContext.PrimaryToken;

else // This should hopefully never be reached!
{
SeReleaseSubjectContext(&subjectContext);
return NULL;
}

ntStatus = ObOpenObjectByPointer(accessToken, 0, NULL
, TOKEN_QUERY, NULL, KernelMode, &token);
}

SoftICE Stack trace (read downwards):
FastIoQueryOpen
ObOpenObjectByPointer
ExCreateCallback
ExEnumHandleTable

The crash is as a result of a PageFault in ExEnumHandleTable. The thread &
process are always SYSTEM, and I’ve verified that most of the time,
FastIoQueryOpen works without any problems. This is running under NT4.0
(SP6a). Fortunately I can remove the code from this FastIO call, but I’d like
to make sure that this issue will not be found in any other FastIO function.
Any help would be appreciated.