일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- otpkey
- 애플
- MSYS2
- SSH
- 2FA
- SWIFT
- MFA
- fido
- Nodejs
- 인증
- WebAuthn
- SSL
- FIDO2
- kmip
- 앨범북
- git
- albumbook
- MYSQL
- apple
- openssl
- OTP
- SwiftUI
- 앱리소스
- 안드로이드
- OSX
- css
- Android
- 앱스토어
- appres
- Xcode
- Today
- Total
인디노트
드라이버 서비스를 삭제할 때 주의할 점 본문
퍼옴 : http://pyrasis.com/blog/entry/ServiceDeleteFlag <= 원문에 복제 금지가 있어서 링크 겁니다. 대신 여기는 글씨를 아주 흐리게 하였습니다.
윈도우에서 드라이버를 로드하려면 일단 CreateService
함수로 서비스를 생성해야 합니다. 드라이버를 잘 사용하고 난 뒤 드라이버를 언로드하고 드라이버의 서비스를 삭제할 때 DeleteService
함수를 사용합니다.
이때 응용프로그램과 통신을 위해 생성한 디바이스 오브젝트 등을 CreateFile
등의 함수로 열었을 때 꼭 핸들을 닫아줘야 합니다.
핸들을 닫지 않은채로 DeleteService
함수로 드라이버 서비스를 삭제하게 되면 완전히 삭제되지 않고 흔적이 남아있게 됩니다.
즉 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<드라이버 이름>
키 아래에 DeleteFlag라는 DWORD 값이 생기게 됩니다. 데이터는 1이 들어가있습니다.
서비스가 완전히 삭제되지 않고 삭제 대기중인 상태에서 다시 OpenService
함수로 해당 서비스의 핸들을 얻고 DeleteService
함수를 호출하게 되면 ERROR_SERVICE_MARKED_FOR_DELETE(0x00000430, 1072, 지정된 서비스가 지워진 것으로 표시되었습니다.) 에러가 발생하게 됩니다.
DeleteFlag가 설정된 서비스는 일정 시간이 지나면 자동적으로 삭제됩니다. 하지만 디바이스의 핸들을 닫지 않은 상태에서 CreateService
(OpenService
) 함수와 DeleteService
함수를 연속적으로 호출하게 되면, DeleteFlag가 남아있는 채로 서비스를 삭제하려고 하는 상황이 생길 수 있으니 주의해야 합니다.
'소스 팁 > C, C++, C#' 카테고리의 다른 글
멀티캐스트 송수신 (0) | 2018.06.29 |
---|---|
More IE8 Extensibility Improvements (0) | 2018.06.19 |
서비스에서 GUI 창 띄우기 (0) | 2018.01.09 |
Dokan Directory Structure (0) | 2018.01.04 |
BSTR 변환 (0) | 2017.12.29 |