본문 바로가기

개발158

커널드라이버 Buffered I/O 처리 하기 (MFC, CFile) 드라이버에서 I/O처리 하기 드라이버는 File Object와 매칭되며 File I/O operation을 처리 할 수 있다고 했다. 정말 그렇다면 WriteFile, ReadFile함수를 통해 드라이버에 접근이 가능해야한다. 실제로 그런가?를 확인하기 위해 MFC의 CFile 클래스를 통해 접근해 보았다. CFile 클래스는 MFC에서 File에 대한 추상화 클래스이며 CreateFile,WriteFile, ReadFile등 파일 Operation을 수행 할 수 있다. 또한 예외처리도 되어있어 Win32 api를 통한 파일 접근 보다 좀 더 간편하다. IRP 처리 IRP는 I/O Request Packet의 약자로 I/O Manager에서 IRP라는 Packet통해 Device에게 I/O요청을 하게 된.. 2020. 1. 3.
장치 드라이버와 커널 오브젝트 (Device Driver & Kernel Object) Kernel Object(커널 오브젝트) Windows OS가 구동되는데 많은 요소들이 존재한다. 프로세스가 실행되고, 레지스트리의 값을 읽고, 쓰고, 쓰레드가 생성되고, 파일에 접근한다. 이 모든 리소스들은 Kernel에서는 Kernel Object로 관리된다. Windows의 Kernel Object는 크게 25가지 이상의 유형으로 나뉜다. https://docs.microsoft.com/ko-kr/windows-hardware/drivers/kernel/windows-kernel-mode-object-manager Kernel Object Manager Windows NT Kernel 내부에는 Kernel Object를 관리하는 역할을 하는 것이 있는데 이것을 Kernel Object Manager.. 2019. 12. 30.
장치 드라이버와 파일의 관계? 장치는 파일로 취급 된다. 리눅스에서는 디바이스를 하나의 파일로 취급하여 파일처럼 엑세스 가능하다. 그렇기 때문에 디바이스를 컨트롤 하는 방법은 File Operation 인터페이스를 통해 컨트롤 할 수 있게 된다. 예를 들면 Open, Write, Read, Close 등.. 세상에. 그런데 윈도우도 마찬가지다. 윈도우에서도 장치를 File Object를 통해 관리 하고 접근 할 수 있다. 마치 파일처럼 CreateFile, WriteFile, ReadFile, CloseHandle 로 말이다. 밑으로 내려가면 거기서 거기이다. 왜 File Object 윈도우에서 파일객체는 장치를 나타내는 커널모드 자료구조체 이다. 왜 파일 객체로 장치를 표현할까? 두 개 이상의 유저모드 프로세스가 공유할 수 있는 시.. 2019. 12. 30.
SwiftUI에서 Admob광고 추가하기 SwiftUI로 넘어오면서 Admob광고를 어떻게 추가하느냐가 문제가 되었다. 구글에서는 SwiftUI발표 이후 따로 이에 대해 따로 발표한게 없는 것으로 안다. 다행히 SwiftUI는 완전 새로운 것이 아니기 때문에 하위호환성도 어느정도 가지고 있다. StackOverflow에 다행히 해결 방법이 존재 하였다. # Google AdMob integration in SwiftUI 우선, UIViewControllorRepresentable을 상속받아 GADBannerViewController를 정의한다. import GoogleMobileAds import SwiftUI import UIKit struct GADBannerViewController: UIViewControllerRepresentable .. 2019. 12. 27.
드라이버란 무엇일까? 드라이버 드라이버는 ... 아주 오래?전 컴퓨터에 새로운 장치를 구입하여 사용하려면 무언가가 필요했었다. 구입한 새로운 장치의 박스에는 설명서, 보증서가 동봉 되어있고, 플로피 디스크나 CD롬이 들어 있었다. 플로피디스크나 CD를 컴퓨터에 넣어 무언가를 설치해야 장치를 사용할 수 있었다. 이것이 바로 장치 드라이버라는 프로그램이다. 장치 드라이버는 특정 장치를 컴퓨터에서 사용 가능하도록 만들어 준다. 드라이버(Driver)라는 말을 들었을 때 처음 떠오르는 것은 프로그램이 아니다. 나사 따위를 를 돌리는 그런 스크류 드라이버가 먼저 떠오른다. 정확히 우리나라말로 번역되지도 않는 컴퓨터 용어이다. 여기서 부터 우리를 혼란스럽게 한다. 책을 읽고 MDSN따위를 찾아가며 개념을 익히지만 가슴에 와 닿지 않는 .. 2019. 12. 27.
사설인증서 생성 & 실행파일 코드사이닝 하기 openssl 1.1.1g기준 입니다. https://slproweb.com/products/Win32OpenSSL.html 1. OpenSSL을 이용하여 사설 인증서 생성하기 1.1. 개인키 생성 인증서로 실행파일을 코드사이닝 하려면 당연 인증서가 필요하다. OpenSSL명령어를 통해 인증서를 생성해보자. 추가로 비밀번호를 입력 받는다. openssl genrsa -aes256 -out private.key 2048 private.key파일이 생성된다. 1.2. 인증요청서 생성(CSR) 개인키를 생성하였으면 인증요청서를 만들어준다. 이때 회사이름, 이메일, 국가정보 등을 입력한다. openssl req -new -in private.key -out req.csr req.csr 파일이 생성된다. 1.3... 2019. 12. 12.
Swift 함수 2 - 함수형 프로그래밍? 0. 함수형 프로그래밍??? Swift코드를 처음 접하게 된다면 적지 않게 난감한 코드가 눈에 들어오는데 바로 함수이다. 앞서 포스팅한 함수는 기존 여타 다른 언어들(절차지향적 언어, 명령형언어 java, C 등등)과 마찬가지 수준이지만 오늘 공부한 함수는 바로 함수형 프로그래밍의 페러다임에 따라 다양한 함수의 사용성을 공부해보고자 한다. 나는 주로 현업에서 Windows 시스템 프로그래밍을 하고 있는 개발자 이기 때문에 C, C++문법에 좀 더 익숙하다. 이런 관점에서 봤을 때 함수형 프로그래밍 언어인 스위프트를 봤을 때 상당히 낯설다. 이론적으로 찾아보면 함수형 프로그래밍의 가장 큰 특징은 프로그램의 상태에 관계없이 항상 같은 결과를 얻어낼 수 있다는 점이다. 이게 무슨말인지 함수형 프로그래밍을 해보.. 2019. 12. 1.
php에서 큰 파일 라인별로 읽기 php에서 대용량 큰 파일을 file_get_contents로 읽게 되면 메모리에 한번에 로드 하게 되어 메모리 부족으로 php스크립트를 실행 할 수 없는 상황이 발생한다. 이 때 라인 별로 읽으면 메모리 부족을 회피하여 실행 할 수 있게 된다. 아래는 예제코드 $handle = fopen("inputfile.txt", "r"); if ($handle) { while (($line = fgets($handle)) !== false) { // process the line read. } fclose($handle); } else { // error opening the file. } 2019. 11. 29.
Swift 상수, 변수 스위프트에도 상수와 변수의 개념이 존재한다. 상수는 변하지 않는 값을 말하며, 변수는 변하는 값을 말한다. 변수는 var, 상수는 let 키워드를 통해 선언 될 수 있다. 1. 상수 : let 상수는 변하지 않는 값을 저장한다. 아래 예제코드를 보자. import Foundation let a : Int //상수 선언 a = 5 // 값대입 print(a) a = 6 //상수는 변경할 수 없다. a라는 상수를 선언하고 5를 대입하였다. 한번 출력하고 6을 입력할 때 컴파일러는 에러를 내놓는다. /tmp/B9F84CA6-7E22-4113-AE2E-A0D6A98845B4.beSm8X/main.swift:10:3: error: immutable value 'a' may only be initialized on.. 2019. 11. 27.