Language & API/WINDOWS DRIVER
Language & API/WINDOWS DRIVER
2016. 7. 25.
[함수]IoGetCurrentIrpStackLocation
123456FORCEINLINE__drv_aliasesMemPIO_STACK_LOCATIONIoGetCurrentIrpStackLocation( _In_ PIRP Irp)cs [파라미터]Irp -> 디바이스 스택 정보를 가지고 있는 IRP의 포인터다. [반환값]IRP의 IO_STACK_LOCATION 중 가장 최근(최상단, TOP)에 위치해 있는 구조체를 반환한다. [함수설명]현재의 드라이브가 가지는 다바이스 스택의 가장 최근 위치를 구해주는 함수이다. [호출할때 요구되는 IRQL]IRQL == ANY IRQL 아래 예제이다. 1234567891011121314NTSTATUSSAMPLE1_PnpDispatch(IN PDEVICE_OBJECT DeviceObject,IN PIRP Irp){ PIO_STAC..
Language & API/WINDOWS DRIVER
2016. 7. 25.
[함수]IoCreateSymbolicLink
12345NTSTATUSIoCreateSymbolicLink( _In_ PUNICODE_STRING SymbolicLinkName, _In_ PUNICODE_STRING DeviceName );Colored by Color Scriptercs [파라미터] SymbolicLinkName -> 유저 네임 유니코드 스트링 버퍼, 드라이버가 유저 모드 응용프로그램, System Componet에 제공하는 인터페이스이다. DeviceName -> 드라이버 오브젝트에서 만든 유니코드 스트링 버퍼, PDEVICE_OBJECT가 만들어질 때 사용된 이름이다. [반환값] PDEIVCE_OBJECT 의 DeviceName 과 SymbolicLinkName을 연결시키는 데 성공했다면 STATUS_SUCCESS 를 반환한다...
Language & API/WINDOWS DRIVER
2016. 7. 25.
[함수]IoSetDeviceInterfaceState
12345NTSTATUS IoSetDeviceInterfaceState( _In_ PUNICODE_STRING SymbolicLinkName, _In_ BOOLEAN Enable); Colored by Color Scriptercs [파라미터] SymbolicLinkName -> IoRegisterDeviceInterface or IoGetDeviceInterfaces 포함된 스트링, 디바이스 인터페이스 이름을 나타낸 스티링 Enable -> TRUE -> device interface Enable FALSE -> device interface Disable [리턴값] 성공하면 STATUS_SUCCESS를 반환한다.
Language & API/WINDOWS DRIVER
2016. 7. 25.
[함수]IoRegisterDeviceInterface
12345678910NTSTATUSNTAPIIoRegisterDeviceInterface( _In_ PDEVICE_OBJECT PhysicalDeviceObject, _In_ CONST GUID *InterfaceClassGuid, _In_opt_ PUNICODE_STRING ReferenceString, _Out_ _When_(return==0, _At_(SymbolicLinkName->Buffer, __drv_allocatesMem(Mem))) PUNICODE_STRING SymbolicLinkName );Colored by Color Scriptercs [파라미터]PhysicalDeviceObject -> PDO 포인터 InterfaceClassGuid -> GUID 클래스 포인터, Referenc..
Language & API/WINDOWS DRIVER
2016. 7. 25.
[자료구조]DEVICE_OBJECT
1234567891011121314151617181920212223242526272829303132333435363738394041typedef struct DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT) _DEVICE_OBJECT { CSHORT Type; USHORT Size; LONG ReferenceCount; struct _DRIVER_OBJECT *DriverObject; struct _DEVICE_OBJECT *NextDevice; struct _DEVICE_OBJECT *AttachedDevice; struct _IRP *CurrentIrp; PIO_TIMER Timer; ULONG Flags; // See above: DO_... ULONG Character..
Language & API/WINDOWS DRIVER
2016. 7. 25.
[함수]IoAttachDeviceToDeviceStack
123456PDEVICE_OBJECTIoAttachDeviceToDeviceStack( _In_ _When_(return!=0, __drv_aliasesMem) PDEVICE_OBJECT SourceDevice, _In_ PDEVICE_OBJECT TargetDevice );Colored by Color Scriptercs [파라미터]SourceDevice -> 드라이버 루틴에서 IoCreateDevice()를 호출해 만들어낸 PDEVICE_OBJECT의 포인터다. 해당 드라이버는 TargetDevice가 포함된 다바이스 스택에 동참한다. TargetDevice -> SourceDevice가 연결하고자 하는 PDEVICE_OBJECT의 포인터다. 보통 WDM 드라이버에서 이 값은 PDO(physical ..
Language & API/WINDOWS DRIVER
2016. 7. 25.
[함수]IoCreateDevice
12345678910111213141516NTSTATUSIoCreateDevice( _In_ PDRIVER_OBJECT DriverObject, _In_ ULONG DeviceExtensionSize, _In_opt_ PUNICODE_STRING DeviceName, _In_ DEVICE_TYPE DeviceType, _In_ ULONG DeviceCharacteristics, _In_ BOOLEAN Exclusive, _Outptr_result_nullonfailure_ _At_(*DeviceObject, __drv_allocatesMem(Mem) _When_((((_In_function_class_(DRIVER_INITIALIZE)) ||(_In_function_class_(DRIVER_DISPATC..