#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
*/
VOID
EXPORT
-NdisGetSystemUpTime(
- OUT PULONG pSystemUpTime)
-/*
- * FUNCTION:
- * ARGUMENTS:
- * NOTES:
- * NDIS 5.0
- */
+NdisGetSystemUpTime(OUT PULONG pSystemUpTime)
{
- /* Get the uptime of the system in msec */
- *pSystemUpTime = ( (SharedUserData->TickCountLowDeprecated * SharedUserData->TickCountMultiplier) / 0x1000000);
+ 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;
+}