분류 전체보기

    Miniport drivers

    Miniport drivers NDIS 미니포트 드라이버는 두 가지 기본적인 기능을 가지고 있다: NIC를 통해 데이터 송/수신을 포함하는 Netword Interface Card (NIC) 관리. Filter 드라이버, Intermediate 드라이버 그리고 Protocol 드라이버와 같은 상위 레벨 드라이버와의 인터페이싱. 미니포트 드라이버는 NDIS 라이브러리를 통해 NIC와 상위 레벨 드라이버간에 통신을 한다. NDIS 라이브러리는 미니포트 드라이버가 호출 해야 할 모든 운영체제 함수들(NdisMXxx, NdisXxx 함수)을 제공하고 있다. 미니포트 드라이버는 NDIS가 상위 레벨 드라이버를 대신해 미니포트 드라이버에 접근하거나 자체적인 목적을 수행하기 위해 호출 할 경우를 위해 Miniport..

    NDIS 드라이버 유형

    Network Driver Interface Specification (NDIS) 라이브러리는 네트워크 드라이버에서 네트워크 하드웨어들을 추상화한다. 또한 NDIS는 네트워크 전송과 같은 상위 레벨 드라이버들에서 하드웨어를 관리하는 하위 레벨 드라이버들이 추상화 된 네트워크 드라이버 계층 간의 표준 인터페이스를 구체적으로 명시한다. 또한 NDIS는 다른 시스템 값과 연결을 위한 매개변수 블록, 핸들 그리고 함수들에 대한 포인터를 포함하는 매개 변수들과 상태 정보를 유지 관리한다. NDIS가 제공하는 네트워크 드라이버들의 기본적인 유형은 다음과 같다. Miniport Drivers Protocol Drivers Filter Drivers Intermediate Drivers 링크: https://docs...

    #SingleInstance

    #SingleInstance [ForceIgnoreOff] 이 구문이 들어가면 스크립트가 이미 실행 중인 상황에서 다시 실행할 수 있는지 여부를 결정할 수 있다. ForceIgnoreOff 에 어떠한 내용이 들어가느냐에 따라 결정된다. #SingleInstance ForceIgnoreOff 생략 시, 이전에 실행 중인 스크립트를 유지할지 새로 실행할지 묻는 MsgBox를 표시한다. #SingleInstance force 여부를 묻지 않고 강제로 새로운 스크립트를 실행하게 한다. #SingleInstance ignore 실행중인 기존 스크립트를 그대로 유지한다. #SingleInstance off 기존 스크립트를 유지한 상태로, 새로운 스크립트가 별도로 실행 된다.

    AutoHotkey

    개인적으로 모바일 게임을 즐겨 하는데, 이러한 매크로 프로그램 작성에 관심이 생겨 알아보다. 만들기도 간편해 보이고 심심할 때마다 들여다보기 재미있을 것 같아서 이에 대한 내용을 써보려고 새로 카테고리를 만들었습니다. AutoHotkey https://www.autohotkey.com/ - AutoHotkey 공식 홈페이지 https://www.autohotkey.com/download/ahk-install.exe - AutoHotkey 최신 버전 다운로드 링크 AutoHotkey 스크립트 에디터 http://fincs.ahk4.net/scite4ahk/ - 스크립트 에디터 공식 홈페이지 http://fincs.ahk4.net/scite4ahk/dl/s4ahk-install.exe - 스크립트 에디터 다..

    visual studio 2017 에서 Driver 개발

    기존에는 Visual Studio에서 드라이버를 개발 할 때 ddkbuild를 사용하여 빌드 환경을 구축 했었다. 하지만 세월이 흘러 Visual Studio 자체에서 드라이버 개발 환경을 제공 해주게 되었다. 새 프로젝트 - Visual C++ - Windows Drivers와 같이 새로운 드라이버 프로젝트를 생성 할 수 있는 방도가 마련되었다. 기본적으로 설치 되지는 않고 확장 기능으로 제공되니 도구→확장 및 업데이트 메뉴에서 Windows Driver Kit을 설치 해줘야 한다. 물론 Visual Studio에서 기존처럼 ddkbuild를 사용해 개발해도 되지만 ARM 환경과 같은 곳에서 동작하는 드라이버를 빌드하려면 해당 기능을 사용해야 하는것이 필수처럼 되었다. 그리하여 ddkbuild, sou..

    MSB8022

    Visual Studio 환경에서 ARM 빌드를 사용 할 경우 MSB8022 Error가 발생 할 수 있다.이에 대한 해결 방법으로 해당 프로젝트 폴더에 들어가 vcxproj 파일을 메모장으로 열어 해당 솔루션 플랫폼에 다음과 같은 구문을 추가한다.true자세한 사항은 이곳의 링크를 참조: https://pete.akeo.ie/2017/05/compiling-desktop-arm-applications-with.html

    IrpSp->FileObject

    https://msdn.microsoft.com/ko-kr/library/windows/hardware/ff548630(v=vs.85).aspx irpsp->fileobject은 I/O Manager가 Create 또는 Open 하는 대상 파일을 가리키기 위한 File Object 형식의 포인터다. File System이 IRP_MJ_CREATE 요청을 처리 할 때, 이 File Object의 FsContext와 FsContext2 필드에는 File System 고유의 값이 셋팅 된다. 따라서 FsContext와 FsContext2 필드의 값들은 File System이 Create 요청을 처리하기 전 까지는 유효하다고 볼 수가 없다. FltCancelFileOpen과 IoCancelFileOpen은 Fi..

    IopLoadUnloadDriver

    VOID NTAPI IopLoadUnloadDriver(PLOAD_UNLOAD_PARAMS LoadParams) { RTL_QUERY_REGISTRY_TABLE QueryTable[3]; UNICODE_STRING ImagePath; UNICODE_STRING ServiceName; NTSTATUS Status; ULONG Type; PDEVICE_NODE DeviceNode; PDRIVER_OBJECT DriverObject; PLDR_DATA_TABLE_ENTRY ModuleObject; PVOID BaseAddress; WCHAR *cur; // 언로드 요청인지 아닌지 검사한다. if (LoadParams->DriverObject) { // 드라이버 로드/언로드에 관련된 파라미터안에 드라이버 객체가..

    NtLoadDriver가 STATUS_PRIVILEGE_NOT_HELD(0xC0000061)를 리턴

    NtLoadDriver()를 사용해서 드라이버를 로드하려고 하는데, 레지스트리 키도 정상적으로 생성했고, 모든 값이 정상적인데도 불구하고 0xC0000061(Privilege not held) 값을 리턴하는 경우에는 권한 문제일 수 있다. 관리자 모드라고 할지라도 몇 Privileges는 기본적으로 Disable일 경우가 있는데 이러한 권한들이 필요한 작업을 하기 위해서는 작업을 수행하기 전에 확실하게 Enable 값으로 설정이 해야한다. NtLoadDriver 같은 경우에는 드라이버를 로드 할 수 있는 권한(SeLoadDriverPrivilege)가 필요하다. 이는 AdjustTokenPrivileges() 함수를 사용해 이 권한을 Enable 시킬 수 있다. 함수의 자세한 사항은 MSDN을 참고하는 ..

    IoCreateDevice와 IoCreateDeviceSecure

    NTSTATUS IoCreateDevice( _In_ PDRIVER_OBJECT DriverObject, _In_ ULONG DeviceExtensionSize, _In_opt_ PUNICODE_STRING DeviceName, _In_ DEVICE_TYPE DeviceType, _In_ ULONG DeviceCharacteristics, _In_ BOOLEAN Exclusive, _Out_ PDEVICE_OBJECT *DeviceObject );NTSTATUS IoCreateDeviceSecure( _In_ PDRIVER_OBJECT DriverObject, _In_ ULONG DeviceExtensionSize, _In_opt_ PUNICODE_STRING DeviceName, _In_ DEVICE_..