종류가 다르다. 2000 버전에서 사용하는 SFilter는 정적 로딩이고,
XP버전으로 새로나온 SFilter는 동적 로딩도 가능하다.
다들 그냥 Filemon으로 동적 후킹을 하는 경우가 많다.
그것도 좋은 방법 이지만 볼륨관련작업을 하기 위해서는 SFilter도 접근해보는게 좋다.
Sfilter에서 드라이버와 통신하기 위해서는 심벌릭 링크를 생성해야한다.
- /**
- 심볼릭 링크를 생성하는 루틴
- **/
- RtlInitUnicodeString( &SymbolicName, AUTHMON_DOS_DEVICE_NAME );
- status = IoCreateSymbolicLink( &SymbolicName, &DeviceName );
- if( !NT_SUCCESS( status ) )
- {
- IoDeleteDevice( g_AuthMonControlDeviceObject );
- return status;
- }
- /**
- 드라이버 오브젝트를 초기화하는 루틴
- **/
그리고 어플리케이션에서는 이렇게 하면된다.
- bool CDriverModuleDlg::OpenDevice()
- {
- m_hFile = CreateFile(
- "\\\\.\\AuthMon",// m_strSymbolicLink,
- GENERIC_READ |
- GENERIC_WRITE,
- 0,
- NULL,
- OPEN_EXISTING,
- FILE_ATTRIBUTE_NORMAL,
- NULL
- );
- if ( INVALID_HANDLE_VALUE == m_hFile )
- {
- AfxMessageBox( _T("지정한 Device 열기 실패"), MB_ICONERROR );
- return false;
- }
- return true;
- }
<TEXTAREA class="cpp" style="DISPLAY: none" name=code rows=10
cols=60>bool CDriverModuleDlg::OpenDevice() { m_hFile = CreateFile(
"\\\\.\\AuthMon",// m_strSymbolicLink, GENERIC_READ | GENERIC_WRITE, 0, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); if ( INVALID_HANDLE_VALUE ==
m_hFile ) { AfxMessageBox( _T("지정한 Device 열기 실패"), MB_ICONERROR ); return false;
} return true; }</TEXTAREA>