관리 메뉴

kisoo

Mini filter 개발 시에 알아두어야 할 함수 본문

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).aspx
NTSTATUS 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).aspx
NTSTATUS 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).aspx
NTSTATUS FltStartFiltering(
  __in  PFLT_FILTER Filter
);
** Filter Manager에서 필터링 시작을 알림.

http://msdn.microsoft.com/en-us/library/windows/hardware/ff541871(v=vs.85).aspx
VOID FltCloseCommunicationPort(
  __in  PFLT_PORT ServerPort
);
** IOCP Port 해제.

http://msdn.microsoft.com/en-us/library/windows/hardware/ff544606(v=vs.85).aspx
VOID FltUnregisterFilter(
  __in  PFLT_FILTER Filter
);
** 필터링 등록 해제.

User
http://msdn.microsoft.com/en-us/library/windows/hardware/ff540460(v=vs.85).aspx
HRESULT 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).aspx
HANDLE WINAPI CreateIoCompletionPort(
  __in      HANDLE FileHandle,
  __in_opt  HANDLE ExistingCompletionPort,
  __in      ULONG_PTR CompletionKey,
  __in      DWORD NumberOfConcurrentThreads
);
** FilterConnectCommnunicationPort 함수에서 얻은 File HANDLE을 가지고 I/O HANDLE을생성.
Comments