#include "ndissys.h"
-
/*
* @unimplemented
*/
memmove ( FullFileName.Buffer, NDIS_FILE_FOLDER, FullFileName.Length );
*Status = RtlAppendUnicodeStringToString ( &FullFileName, FileName );
if ( !NT_SUCCESS(*Status) )
+ {
+ *Status = NDIS_STATUS_FAILURE;
goto cleanup;
+ }
InitializeObjectAttributes ( &ObjectAttributes,
&FullFileName,
FILE_SYNCHRONOUS_IO_NONALERT, // ULONG CreateOptions
0, // PVOID EaBuffer
0 ); // ULONG EaLength
-
- //if ( !NT_SUCCESS(*Status) )
- // goto cleanup;
+
+ if ( !NT_SUCCESS(*Status) )
+ {
+ *Status = NDIS_STATUS_FAILURE;
+ }
cleanup:
if ( FullFileName.Buffer != NULL )
ExFreePool ( FullFileName.Buffer );
FullFileName.Buffer = NULL;
}
- if ( !NT_SUCCESS(*Status) && FileHandleObject != NULL )
+ if ( !NT_SUCCESS(*Status) )
{
- ExFreePool ( FileHandleObject );
- FileHandleObject = NULL;
+ if( FileHandleObject ) {
+ ExFreePool ( FileHandleObject );
+ FileHandleObject = NULL;
+ }
*FileHandle = NULL;
}
else
/*
- * @unimplemented
+ * @implemented
*/
CCHAR
EXPORT
NdisSystemProcessorCount(
VOID)
{
- return (CCHAR)1;
+ return (CCHAR)KeNumberProcessors;
}
/*
- * @unimplemented
+ * @implemented
*/
VOID
EXPORT
* NDIS 5.0
*/
{
- UNIMPLEMENTED
+ ExGetCurrentProcessorCounts( (PULONG) pIdleCount, (PULONG) pKernelAndUser, (PULONG) pIndex);
}
/*
- * @unimplemented
+ * @implemented
*/
VOID
EXPORT
-NdisGetSystemUptime(
- OUT PULONG pSystemUpTime)
-/*
- * FUNCTION:
- * ARGUMENTS:
- * NOTES:
- * NDIS 5.0
- */
-{
- UNIMPLEMENTED
+NdisGetSystemUpTime(OUT PULONG pSystemUpTime)
+{
+ ULONG Increment;
+ LARGE_INTEGER TickCount;
+
+ /* Get the increment and current tick count */
+ Increment = KeQueryTimeIncrement();
+ KeQueryTickCount(&TickCount);
+
+ /* Convert to milliseconds and return */
+ TickCount.QuadPart *= Increment;
+ TickCount.QuadPart /= (10 * 1000);
+ *pSystemUpTime = TickCount.LowPart;
}
return NDIS_STATUS_FAILURE;
}
-/* EOF */
+
+
+VOID
+NTAPI
+ndisProcWorkItemHandler(PVOID pContext)
+{
+ PNDIS_WORK_ITEM pNdisItem = (PNDIS_WORK_ITEM)pContext;
+ pNdisItem->Routine(pNdisItem, pNdisItem->Context);
+}
+
+EXPORT
+NDIS_STATUS
+NdisScheduleWorkItem(
+ IN PNDIS_WORK_ITEM pWorkItem)
+{
+ PWORK_QUEUE_ITEM pntWorkItem = (PWORK_QUEUE_ITEM)pWorkItem->WrapperReserved;
+ ExInitializeWorkItem(pntWorkItem, ndisProcWorkItemHandler, pWorkItem);
+ ExQueueWorkItem(pntWorkItem, CriticalWorkQueue);
+ return NDIS_STATUS_SUCCESS;
+}