01.About Programming /2.Kernel Lab
Mini filter 개발 시에 알아두어야 할 함수
JamesK78
2012. 2. 15. 13:56
http://msdn.microsoft.com/en-us/library/windows/hardware/ff541778(v=vs.85).aspx
NTSTATUS FltRegisterFilter( __in PDRIVER_OBJECT Driver, __in const FLT_REGISTRATION *Registration, __out PFLT_FILTER *RetFilter );
** Filter Manager에게 등록요청을 하는 API. Mini Filter를 만들기 위해서 가장먼저 꼭 해야하는 함수.
http://msdn.microsoft.com/en-us/library/windows/hardware/ff547804(v=vs.85).aspxNTSTATUS FltBuildDefaultSecurityDescriptor( __out PSECURITY_DESCRIPTOR *SecurityDescriptor, __in ACCESS_MASK DesiredAccess );** 보안서술자를 어떤 권한으로 접근하게 할지에 대해서 설정. ( 미니필터에서 Port를 열기위해 Object Attribute를 만들기위해 필요함 )
VOID InitializeObjectAttributes( [out] POBJECT_ATTRIBUTES InitializedAttributes, [in] PUNICODE_STRING ObjectName, [in] ULONG Attributes, [in] HANDLE RootDirectory, [in, optional] PSECURITY_DESCRIPTOR SecurityDescriptor );** 매크로. User와 통신하기위한 Port를 만들기 위해 Object Attribute를 만들기 위해 호출.
http://msdn.microsoft.com/en-us/library/windows/hardware/ff541931(v=vs.85).aspxNTSTATUS FltCreateCommunicationPort( __in PFLT_FILTER Filter, __out PFLT_PORT *ServerPort, __in POBJECT_ATTRIBUTES ObjectAttributes, __in_opt PVOID ServerPortCookie, __in PFLT_CONNECT_NOTIFY ConnectNotifyCallback, __in PFLT_DISCONNECT_NOTIFY DisconnectNotifyCallback, __in_opt PFLT_MESSAGE_NOTIFY MessageNotifyCallback, __in LONG MaxConnections );** User-Mode Application과 통신하기 위한 IOCP Port를 설정.
요청이 들어온 경우 Callback 함수 등록.
해제요청이 들어온 경우 Callback 함수 등록.
http://msdn.microsoft.com/en-us/library/windows/hardware/ff542984(v=vs.85).aspx
VOID FltFreeSecurityDescriptor( __in PSECURITY_DESCRIPTOR SecurityDescriptor );** 보안서술자 해제.
http://msdn.microsoft.com/en-us/library/windows/hardware/ff544569(v=vs.85).aspxNTSTATUS FltStartFiltering( __in PFLT_FILTER Filter );** Filter Manager에서 필터링 시작을 알림.
http://msdn.microsoft.com/en-us/library/windows/hardware/ff541871(v=vs.85).aspxVOID FltCloseCommunicationPort( __in PFLT_PORT ServerPort );** IOCP Port 해제.
http://msdn.microsoft.com/en-us/library/windows/hardware/ff544606(v=vs.85).aspxVOID FltUnregisterFilter( __in PFLT_FILTER Filter );** 필터링 등록 해제.
User
http://msdn.microsoft.com/en-us/library/windows/hardware/ff540460(v=vs.85).aspxHRESULT FilterConnectCommunicationPort( __in LPCWSTR lpPortName, __in DWORD dwOptions, __in_opt LPCVOID lpContext, __in WORD dwSizeOfContext, __in_opt LPSECURITY_ATTRIBUTES lpSecurityAttributes, __out HANDLE *hPort );
** 미니필터와 연결하는 함수. lpPortName으로 연결할 대상을 정함. 미니필터와 통신하기 위한 File HANDLE을 얻음.
http://msdn.microsoft.com/en-us/library/windows/desktop/aa363862(v=vs.85).aspxHANDLE WINAPI CreateIoCompletionPort( __in HANDLE FileHandle, __in_opt HANDLE ExistingCompletionPort, __in ULONG_PTR CompletionKey, __in DWORD NumberOfConcurrentThreads );** FilterConnectCommnunicationPort 함수에서 얻은 File HANDLE을 가지고 I/O HANDLE을생성.