// Gemplus (C) 1999 // Version 1.0 // Author: Sergey Ivanov // Date of creation - 18.05.1999 // Change log: // #ifndef SYS_INT #define SYS_INT #include "generic.h" #pragma PAGEDCODE // This is device interface to system... class CSystem { public: NTSTATUS m_Status; SAFE_DESTRUCTORS(); virtual VOID dispose(){self_delete();}; protected: CSystem(){}; virtual ~CSystem(){}; public: // This object will implement next interfaces... virtual NTSTATUS createDevice(PDRIVER_OBJECT DriverObject, ULONG DeviceExtensionSize, PUNICODE_STRING DeviceName OPTIONAL, DEVICE_TYPE DeviceType, ULONG DeviceCharacteristics, BOOLEAN Reserved, PDEVICE_OBJECT *DeviceObject) {return STATUS_SUCCESS;}; virtual VOID deleteDevice(PDEVICE_OBJECT DeviceObject) {}; virtual PDEVICE_OBJECT attachDevice(PDEVICE_OBJECT FuncDevice,IN PDEVICE_OBJECT PhysDevice) {return NULL;}; virtual VOID detachDevice(PDEVICE_OBJECT TargetDevice) {}; virtual NTSTATUS callDriver(PDEVICE_OBJECT DeviceObject,PIRP Irp) {return STATUS_SUCCESS;}; virtual NTSTATUS registerDeviceInterface(PDEVICE_OBJECT PhysicalDeviceObject, CONST GUID *InterfaceClassGuid, PUNICODE_STRING ReferenceString, OPTIONAL PUNICODE_STRING SymbolicLinkName) {return STATUS_SUCCESS;}; virtual NTSTATUS setDeviceInterfaceState(PUNICODE_STRING SymbolicLinkName,BOOLEAN Enable) {return STATUS_SUCCESS;}; virtual NTSTATUS createSystemThread(OUT PHANDLE ThreadHandle, IN ULONG DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN HANDLE ProcessHandle OPTIONAL, OUT PCLIENT_ID ClientId OPTIONAL, IN PKSTART_ROUTINE StartRoutine, IN PVOID StartContext) {return STATUS_SUCCESS;}; virtual NTSTATUS terminateSystemThread(IN NTSTATUS ExitStatus) {return STATUS_SUCCESS;}; virtual NTSTATUS referenceObjectByHandle(IN HANDLE Handle, IN ACCESS_MASK DesiredAccess, IN POBJECT_TYPE ObjectType OPTIONAL, IN KPROCESSOR_MODE AccessMode, OUT PVOID *Object, OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL ) {return STATUS_SUCCESS;}; virtual VOID referenceObject(IN PVOID Object) {}; virtual VOID dereferenceObject(IN PVOID Object) {}; virtual PDEVICE_OBJECT getAttachedDeviceReference(IN PDEVICE_OBJECT DeviceObject) {return NULL;}; virtual NTSTATUS ZwClose(IN HANDLE Handle) {return STATUS_SUCCESS;}; virtual NTSTATUS createSymbolicLink(IN PUNICODE_STRING SymbolicLinkName,IN PUNICODE_STRING DeviceName) {return STATUS_SUCCESS;}; virtual NTSTATUS deleteSymbolicLink(IN PUNICODE_STRING SymbolicLinkName) {return STATUS_SUCCESS;}; virtual VOID invalidateDeviceRelations(IN PDEVICE_OBJECT DeviceObject,IN DEVICE_RELATION_TYPE Type) {}; virtual NTSTATUS getDeviceObjectPointer(IN PUNICODE_STRING ObjectName, IN ACCESS_MASK DesiredAccess, OUT PFILE_OBJECT *FileObject, OUT PDEVICE_OBJECT *DeviceObject) {return STATUS_SUCCESS;}; virtual VOID raiseIrql(IN KIRQL NewIrql,OUT KIRQL* oldIrql) = 0; virtual VOID lowerIrql (IN KIRQL NewIrql) = 0; virtual KIRQL getCurrentIrql()=0; virtual VOID initializeDeviceQueue(IN PKDEVICE_QUEUE DeviceQueue) = 0; virtual BOOLEAN insertDeviceQueue(IN PKDEVICE_QUEUE DeviceQueue,IN PKDEVICE_QUEUE_ENTRY DeviceQueueEntry) = 0; virtual BOOLEAN insertByKeyDeviceQueue(IN PKDEVICE_QUEUE DeviceQueue,IN PKDEVICE_QUEUE_ENTRY DeviceQueueEntry,IN ULONG SortKey) = 0; virtual PKDEVICE_QUEUE_ENTRY removeDeviceQueue(IN PKDEVICE_QUEUE DeviceQueue) = 0; virtual PKDEVICE_QUEUE_ENTRY removeByKeyDeviceQueue(IN PKDEVICE_QUEUE DeviceQueue,IN ULONG SortKey) = 0; virtual BOOLEAN removeEntryDeviceQueue(IN PKDEVICE_QUEUE DeviceQueue,IN PKDEVICE_QUEUE_ENTRY DeviceQueueEntry) = 0; virtual NTSTATUS openDeviceRegistryKey(IN PDEVICE_OBJECT DeviceObject, IN ULONG DevInstKeyType, IN ACCESS_MASK DesiredAccess, OUT PHANDLE DevInstRegKey ) = 0; virtual NTSTATUS ZwQueryValueKey(IN HANDLE KeyHandle, IN PUNICODE_STRING ValueName, IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, OUT PVOID KeyValueInformation, IN ULONG Length, OUT PULONG ResultLength) = 0; virtual NTSTATUS getDeviceProperty(IN PDEVICE_OBJECT DeviceObject, IN DEVICE_REGISTRY_PROPERTY DeviceProperty, IN ULONG BufferLength, OUT PVOID PropertyBuffer, OUT PULONG ResultLength ) = 0; virtual VOID initializeFastMutex(IN PFAST_MUTEX FastMutex) = 0; virtual VOID acquireFastMutex(IN PFAST_MUTEX FastMutex) = 0; virtual VOID releaseFastMutex(IN PFAST_MUTEX FastMutex) = 0; }; #endif//SYS_INT