Windows/Registry 2023. 3. 15. 01:44

1. 실행 - regedit 입력 후 관리자로 실행

 

2. 다음 경로로 이동

  컴퓨터\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Citrix\ICA Client\Engine\Lockdown Profiles\All Regions\Lockdown\Virtual Channels\Keyboard

 

3. TransparentKeyPassthrough 의 값을 Remote 로 변경

 

4. Citrix Workspace 연결 해제 후 다시 연결

Windows 2023. 1. 31. 17:42

윈도우 Magic Trackpad 2 사용 전 설치

  • 트랙패드를 윈도우에 그냥 연결하면, 클릭 및 이동은 가능하나 제스처 사용이 불가하여 드라이버를 설치했다.

설치 과정

1. 다음 링크에서 우측 Releases의 최신 버전 클릭

  - https://github.com/imbushuo/mac-precision-touchpad

2. amd64 혹은 arm64 CPU에 맞는 파일 다운로드 후 압축 해제

3. PC에 연결 중인 트랙패드가 있다면 연결 해제하기

4. AmtPtpDevice.inf 파일 우클릭 -> 설치 클릭  (윈도우 11은 "더 많은 옵션 표시" 를 눌러야 나온다.)

 

5. 설치 후 별 다른 창이 나오지 않는다. 트랙패드 연결 후 정상적으로 작동되는 걸 볼 수 있다.

Windows 2023. 1. 5. 11:03

Windows 11 작업표시줄 Webex 이 창의 공유 버튼 비활성화

  • Webex 온라인 미팅 시 작업표시줄에서 그룹화된 프로그램 선택 시 이 창의 공유 버튼이 있어서 불편함을 느꼈다.

  • 윈도우 11 설정 중, 개인 설정 > 작업 표시줄 > 작업 표시줄 동작 에서 작업 표시줄의 모든 창 공유 옵션을 체크해제하면 된다.

Windows 2022. 11. 14. 09:15

Windows Citrix Workspace 화면이 창 밖에 있을 때

  • 굉장히 뜬금없게도 특정 citrix workspace만 화면 밖으로 창이 나가서 안 보이는 상태가 되었다.
  • 심지어 키보드를 바로 리디렉션하도록 레지스트리를 설정해두어, 창을 키보드로 제어할 수 없었다.
  • 작업표시줄에서 우클릭 후 최대화를 누르면 창이 잘 살아있는 것을 확인할 수 있었는데, 그 상태로 최대화를 해제하면 또 사라졌다.

해결

  • 작업표시줄에서 우클릭 후 이동을 누르고, 방향키로 움직여서 꺼내오면 된다..

 

Windows 2022. 6. 20. 19:54

윈도우 그림판 경로

윈도우 10 이하 : C:\Windows\System32\mspaint.exe

윈도우11 : %USERPROFILE%\AppData\Local\Microsoft\WindowsApps\mspaint.exe

Windows 2021. 12. 17. 01:27

Onedrive Personal Vault (개인 중요 보관소) 비활성화

  1. 온라인 Onedrive 접속

  2. 설정 -> 옵션 에 들어간 후 개인 중요 보관소 사용 안함을 활성화


Windows 2021. 10. 31. 00:36

MS 워드 영어 한글 자동 변환 끄기

마이크로소프트 word에서 영어를 자동으로 변환해주는 기능이 있는데, 의도와 다르게 변환되는 경우가 종종 있어서 그냥 끄는게 낫다고 판단하였다.

순서

  • 워드 왼쪽 위의 파일을 클릭하고 옵션 을 선택한다.

  • 언어 교정 탭의 자동 고침 옵션 을 클릭한다.

  • 한/영 자동 고침 체크를 해제하고 확인을 클릭하여 저장한다.

Windows 2021. 9. 11. 19:30

윈도우 볼륨 조절 시 재생 중인 곡 팝업 창

음악이나 영상 재생 중에 볼륨을 조절하면 볼륨크기 오른쪽에 크게 재생 중인 미디어의 팝업이 나와서 화면을 가리는게 신경쓰였다.

윈도우에서 띄우는건줄 알았는데, 크롬이나 Groove 음악 프로그램때문에 나오는 창이었다. 크롬의 경우 간단하게 없앨 수 있는데, 나머지는 HideVolumeOSD 프로그램을 써야한다.

  • 크롬

    크롬 주소창에 chrome://flags/#hardware-media-key-handling를 입력하고, 해당 항목을 disabled로 변경한 후 크롬을 재시작하면 사라진다.

Windows 2021. 6. 14. 18:14

윈도우10 갑자기 업데이트

Windows 2021. 6. 10. 23:41

ㅎㅏㄴㄱㅡㄹㅇㅣ ㅇㅣㅅㅏㅇㅎㅏㄱㅔ ㅊㅕㅈㅣㄹㄸㅐ

  • 윈도우10에서 Win + H 키를 누르면 음성 받아쓰기 모드로 전환된다.

  • 한국어의 경우 지원되지 않는데, 이 기능이 계속 활성화되어 자음과 모음이 분리되는 현상이 발생하는 것 같다.


해결 방법

  • 받아쓰기 모드를 해제하려면 소프트웨어적으로 타이핑을 하면 되는 듯하다.

    • Win + . 를 누르면 이모지 창이 뜨는데, 이걸 꺼주면 원래대로 돌아온다.

    • 혹은 Win + R로 실행 창에 들어가서 tabtip을 입력하면 가상 키보드가 뜨는데, 이걸 꺼주면 원래대로 돌아온다.

      • 한 번 실행하면 백그라운드에서 계속 켜져있기 때문에, 두 번째부터는 작업관리자에서 프로세스를 종료하고 다시 켜야 한다.
Windows/DeviceDriver 2021. 4. 25. 18:07

06. 프로그램 실행 제어

  • 프로그램의 실행을 통제하는 드라이버

이론

윈도우 프로세스 실행 과정

  • 프로그램을 실행시키면, 메모리에 프로세스를 위한 공간을 할당하고 EPROCESS 등의 구조체를 생성한다.

  • 공간 할당이 끝나면, 커널이 등록된 Notify Routine 함수를 호출하여 프로세스의 실행 여부를 결정한다.


드라이버에게 프로세스의 생성과 소멸 시기를 알려주기

  • 프로세스가 실행될 때마다 호출할 함수를 커널에 등록해야 한다.

  • WDK에서 제공되는, Notify Routine 함수를 등록하는 함수들

    • PsSetCreateProcessNotifyRoutine

      NTSTATUS
      PsSetCreateProcessNotifyRoutine(
        IN PCREATE_PROCESS_NOTIFY_ROUTINE  NotifyRoutine,
        IN BOOLEAN  Remove
        );
      
      VOID
      (*PCREATE_PROCESS_NOTIFY_ROUTINE) (
        IN HANDLE  ParentId,
        IN HANDLE  ProcessId,
        IN BOOLEAN  Create
        );
      • 이 방식으로 설치하는 NotifyRoutine은 프로세스가 생성되거나 제거되는 상황을 알 수는 있지만, 생성 과정을 제어할 수 없다.

      • 설치할 때는 두 번째 인자인 Remove를 0으로, 제거할 때는 1로 설정한다.

  • PsSetCreateProcessNotifyRoutineEx

    NTSTATUS
    PsSetCreateProcessNotifyRoutineEx(
      IN PCREATE_PROCESS_NOTIFY_ROUTINE_EX  NotifyRoutine,
      IN BOOLEAN  Remove
      );
    
    VOID
    CreateProcessNotifyEx(
      __inout PEPROCESS  Process,
      __in HANDLE  ProcessId,
      __in_opt PPS_CREATE_NOTIFY_INFO  CreateInfo
      );
    
    typedef struct _PS_CREATE_NOTIFY_INFO {
      __in SIZE_T  Size;
      union {
        __in ULONG  Flags;
        struct {
          __in ULONG  FileOpenNameAvailable : 1;
          __in ULONG  Reserved : 31;
        };
      };
      __in HANDLE  ParentProcessId;
      __in CLIENT_ID  CreatingThreadId;
      __inout struct _FILE_OBJECT  *FileObject;
      __in PCUNICODE_STRING  ImageFileName;
      __in_opt PCUNICODE_STRING  CommandLine;
      __inout NTSTATUS  CreationStatus;
    } PS_CREATE_NOTIFY_INFO, *PPS_CREATE_NOTIFY_INFO;
    • 위 함수의 단점을 보완한 것으로, 프로세스의 생성 과정을 제어할 수 있다.

    • 프로세스가 종료될 때는 CreateProcessNotifyEx 함수의 세 번째 인자에 NULL이 들어간다.

      • 프로세스의 종료를 제어하려면 이 인자가 NULL일 경우를 처리하면 된다.
    • _PS_CREATE_NOTIFY_INFO 구조체의 ImageFileName는 실행하려는 파일의 Full Path Name이다.

    • _PS_CREATE_NOTIFY_INFO 구조체의 CreationStatus는 프로세스 실행 여부를 결정한다.

유의사항

  • 드라이버 바이너리 파일이 변조될 위험이 있기 때문에, 윈도우에서는 파일의 무결성을 체크한다.

    • 이를 위해 링커 옵션에 /integritycheck를 추가해야 한다.
  • 드라이버가 메모리에서 해제될 때는 등록했던 Notify Routine을 제거해야 한다.

    • PsSetCreateProcessNotifyRoutineEx 함수의 두 번째 인자인 Remove에 1(TRUE) 값을 주면, 첫 번째 인자인 NotifyRoutine의 등록을 해제한다.

실습

#include <ntddk.h>

WCHAR g_TempString[512] = { 0, };
void NotifyRoutine(PEPROCESS Process, HANDLE ProcessId, \
  PPS_CREATE_NOTIFY_INFO CreateInfo)
{
  Process = Process; ProcessId = ProcessId;
  if (CreateInfo == NULL)
    goto exit;

  memset(g_TempString, 0, sizeof(WCHAR) * 512);
  memcpy(g_TempString, CreateInfo->ImageFileName->Buffer, CreateInfo->ImageFileName->Length);
  _wcsupr(g_TempString);
  if (wcswcs(g_TempString, L"NOTEPAD.EXE"))
  {
    CreateInfo->CreationStatus = STATUS_UNSUCCESSFUL;
  }

exit:
  return;
}

void SampleDriverUnload(PDRIVER_OBJECT pDrvObj)
{
  pDrvObj = pDrvObj;

  PsSetCreateProcessNotifyRoutineEx(NotifyRoutine, TRUE);
}

NTSTATUS DriverEntry(PDRIVER_OBJECT pDrvObj, PUNICODE_STRING pRegPath)
{
  pRegPath = pRegPath;

  pDrvObj->DriverUnload = SampleDriverUnload;

  PsSetCreateProcessNotifyRoutineEx(NotifyRoutine, FALSE);

  return STATUS_SUCCESS;
}
  • 프로젝트의 속성(Ctrl + Enter)에서 Linker - All Options 탭의 Additional Options/integritycheck를 추가해야 정상적으로 Notify Routine 함수가 실행된다.

    • 무결성 체크 옵션을 주지 않고 빌드하여 드라이버를 올리면, 일단 정상적으로 올라가긴 하는데 메모장도 실행이 된다. 아마 PsSetCreateProcessNotifyRoutineEx 함수가 작동하지 않는 것 같다.

  • 빌드하고 .sys 드라이버 파일은 가상 머신에, .pdb 심볼 파일은 WinDbg에서 지정한 위치로 옮긴 후 관리자 권한의 CMD에서 sc start sample 명령어로 드라이버를 올린다.

  • 그 후 notepad 명령어로 메모장을 실행하면 다음과 같은 오류가 발생한다.

    시스템이 지정된 프로그램을 실행할 수 없습니다.
  • 관리자 권한으로 메모장을 실행하면 다음과 같은 오류를 볼 수 있다.

  • sc stop sample 명령으로 드라이버를 내리면 Notify Routine 함수가 내려가므로 정상적으로 메모장을 실행할 수 있다.

프로세스가 실행될 때 해당 프로그램의 경로 확인

  • WinDbg에서 브레이크 포인트를 걸어준다.

    bp sample!NotifyRoutine
  • sc start sample 명령어를 실행하면 Notify Routine 함수가 실행되는데, 세 번째 인자인 CreateInfoNULL로 들어오기 때문에 바로 함수를 종료하게 된다.

  • 메모장을 실행하게 되면 다시 Notify Routine 함수가 호출되고, 여기서 CreateInfo->ImageFileName->Buffer를 통해 파일의 전체 경로를 볼 수 있다.

    • 꼭 메모장 뿐만 아니라, 모든 프로세스가 실행될 때 등록한 Notify Routine 함수가 호출된다.

  • Notify Routine 함수에 브레이크 포인트를 걸면 프로세스를 종료할 때도 브레이크가 걸리는 것을 알 수 있다.

    • 시스템 종료를 눌러도 Notify Routine이 호출된다.

브레이크 포인트 명령어

  • bl

    • 브레이크 포인트의 리스트를 볼 수 있다.

    • 명령어를 입력하면 브레이크 포인트의 번호와, 클릭할 수 있는 Disable, Clear이 나온다.

      • Disable은 잠깐 비활성화 시키는 것이고, Clear는 브레이크 포인트를 해제하는 것이다.
  • bd 번호

    • bl 명령어로 각 브레이크 포인트의 번호를 얻을 수 있는데, 이를 인자로 받아서 브레이크 포인트를 비활성화(Disable) 시킨다.
  • be 번호

    • bd로 비활성화한 브레이크 포인트를 다시 활성화(Enable) 시킨다.
  • bc 번호

    • 브레이크 포인트를 해제(Clear) 시킨다.

참고

Windows/DeviceDriver 2021. 4. 25. 18:06

05. 5편 구조체분석1 (DRIVER_OBJECT, UNICODE_STRING)

  • WDK 도움말에 구조체 이름을 검색하여 참고하면 좋다.

디바이스 드라이버 구조체

간단한 샘플 드라이버 코드

#include <ntddk.h>

NTSTATUS DriverEntry(PDRIVER_OBJECT pDrvObj, PUNICODE_STRING pRegPath)
{
  return STATUS_UNSUCCESSFUL;
}
  • DriverEntry 함수의 인자는 다음과 같다.

    • pDrvObj : 샘플 드라이버를 설명하는 DRIVER_OBJECT 구조체의 주소

    • pRegPath : 샘플 드라이버가 등록된 시스템 레지스트리의 키 이름 정보가 보관된 메모리를 설명하는 UNICODE_STRING 구조체의 주소


DRIVER_OBJECT 구조체

  • DriverInit : 디바이스 드라이버를 올리는 IO Manager가 DriverEntry의 주소를 저장한다.

  • DriverUnload : 드라이버가 내려갈 때 실행되는 콜백 함수

    • 기본 값은 NULL이며, 프로그래머가 저장해야 한다.

실습

  • 정상적으로 드라이버를 올렸다가 내리는 작업을 WinDbg로 확인할 것이다.

    • 코드를 빌드한 뒤 .sys 드라이버 파일은 가상 머신으로 옮기고, .pdb 심볼 파일은 WinDbg에서 설정한 경로로 옮긴다.

      #include <ntddk.h>
      
      void SampleDriverUnload(PDRIVER_OBJECT pDrvObj)
      {
        pDrvObj = pDrvObj;
      }
      
      NTSTATUS DriverEntry(PDRIVER_OBJECT pDrvObj, PUNICODE_STRING pRegPath)
      {
        pRegPath = pRegPath;
      
        pDrvObj->DriverUnload = SampleDriverUnload;
      
        return STATUS_SUCCESS;
      }
  • 가상 머신과 WinDbg 프로그램을 실행한다.

    • WinDbg에서 가상 머신을 멈춘 뒤 브레이크 포인트를 설정한다.

      bp sample!DriverEntry
      bp sample!SampleDriverUnload
    • 가상 머신에서 관리자 권한으로 CMD를 열어서 드라이버를 올린다.

      sc start sample
    • 올리는 순간 가상 머신이 멈추고 WinDbg에 소스 코드가 나오고 디버깅을 시작한다.

      • 소스 코드가 뜨지 않으면 WinDbg가 소스 코드의 경로를 찾지 못한 것이다.

        • 이럴 경우 직접 소스 코드를 불러와야 볼 수 있다는 것 같다.
    • Go를 눌러 디버깅을 마친 뒤에 드라이버를 메모리에서 내린다.

      sc stop sample
    • 내린 순간 다시 가상 머신이 멈추고 디버깅을 시작한다.

      • pDrvObj->DriverUnload에 등록된 SampleDriverUnload 함수가 호출된 것을 볼 수 있다.

참고

Windows/DeviceDriver 2021. 4. 20. 01:33

4. 프로세스 강제 종료 방지 연습


이론

  • 프로세스가 생성되면 고유의 Process ID를 갖는다.

    • PsLookupProcessByProcessId 함수를 통해 EPROCESS라는 구조체의 주소를 얻을 수 있다.

      <ntifs.h>

      NTSTATUS
        PsLookupProcessByProcessId(
          IN HANDLE ProcessId,
          OUT PEPROCESS *Process
          );
      • 첫 번째 인자로 PID를 받아서, 두 번째 인자를 역참조하여 EPROCESS의 주소(PEPROCESS)를 넘겨준다.
    • "EPROCESS 구조체의 주소 - 0x15"에 해당하는 주소의 값을 0x14로 변경하면, 다른 프로세스가 종료할 수 없도록 설정된다.


실습

빌드

  • 이전에 작성한 sample.c 파일의 내용을 다음과 같이 수정하여 빌드한다.

    #include <ntifs.h>
    
    NTSTATUS DriverEntry(PDRIVER_OBJECT pDrvObj, PUNICODE_STRING pRegistryPath)
    {
      pDrvObj = pDrvObj;
      pRegistryPath = pRegistryPath;
    
      ULONG ProcessId = 0;
      if (ProcessId == 0)
        goto exit;
    
      PEPROCESS pEprocess = NULL;
      PsLookupProcessByProcessId((HANDLE)ProcessId, &pEprocess);
      if (pEprocess)
        *(unsigned char*)((unsigned char*)pEprocess - 0x15) = 0x14;
    
    exit:
      return STATUS_UNSUCCESSFUL;
    }
  • 빌드한 sample.sys 파일을 가상 머신의 C:\sample\ 경로로 이동시킨다.

  • 가상 머신에서 메모장과 작업 관리자를 연 뒤, 세부 정보 탭에서 메모장의 PID를 확인한다.


WinDbg

  • 나는 WinDbg를 켤 때마다 Kernel Debug (Ctrl + K)를 열어서 포트를 수정해줘야 하는데, 이유를 아직 잘 모르겠다.

  • 아무튼 가상 머신과 연결되면, 3장에서처럼 위 함수에 브레이크 포인트를 설정하고, Go를 눌러 다시 진행시킨다.

    bp sample!DriverEntry
  • 가상 머신의 CMD를 관리자 권한으로 열어서, 다음 명령어를 입력하여 드라이버를 로딩한다.

  • WinDbg에서 보면 브레이크 포인트에 걸려서 함수가 나온 것을 볼 수 있다.

    • Step into (F11) 버튼을 눌러 ULONG ProcessId = 0; 명령까지 진행한 뒤, Locals (Alt + 3)을 선택하면 로컬 변수 목록이 나온다.

  • LocalsProcessId 값에 위에서 확인한 notepad.exePID를 입력한다.

  • 그 후 Go를 눌러 가상 머신의 Break를 끝내면, 작업 관리자에서 작업 끝내기를 할 수 없다는 것을 확인할 수 있다.

Windows/DeviceDriver 2021. 4. 20. 01:32

3. 간단한 드라이버와 디버깅


디버깅을 위한 준비

  • 가상 머신에서 호스트와의 파일 공유가 원활하도록 공유 폴더를 지정해둔다.

  • 가상 머신, WinDbg, 비주얼 스튜디오 프로그램을 실행한다.

빌드

  • 새 프로젝트 생성에서 Empty WDM Driver를 선택한다.

  • 프로젝트명은 sample로 설정하였다.

  • Driver Files에서 sample.inf가 존재하는데, 아직 사용하지 않으므로 지워준다.

  • 소스 파일에 sample.c 파일을 생성한다.

    sample.c

    #include <ntddk.h>
    
    NTSTATUS DriverEntry(PDRIVER_OBJECT pDrvObj, PUNICODE_STRING pRegistryPath)
    {
      pDrvObj = pDrvObj;
      pRegistryPath = pRegistryPath;
      return STATUS_UNSUCCESSFUL;
    }
  • x64 환경에서 빌드한다.

    • 그대로 빌드하면 에러가 발생하므로, 프로젝트 설정의 C/C++ - Code Generation - Spectre Mitigation 속성을 Disabled로 변경한다.
  • 솔루션의 경로인 sample에서 x64\Debug\로 이동하면 다음과 같은 파일들을 볼 수 있다.

    • sample.sys

      • 타겟 PC에 위치해야 하는 샘플 드라이버 파일이다.

      • 가상 머신의 공유 폴더로 옮긴 뒤, 가상 머신 내부의 C:\sample\ 경로로 옮겨준다.

    • sample.pdb

      • 호스트 PC에 위치해야 하는 샘플 드라이버 심볼 파일이다.


드라이버 실행 및 디버깅

  • 가상 머신에서 관리자 권한으로 CMD를 실행시킨다.

    • 서비스 생성

      sc create sample binpath=c:\sample\sample.sys type=kernel start=demand
  • WinDbg에서 Break를 클릭하고, 아래 명령줄에 다음을 입력하여 sample 드라이버 모듈의 DriverEntry 함수에 브레이크 포인트를 건다.

    bp sample!DriverEntry
    • 디바이스가 아직 로딩되지 않았기 때문에, 다음 메시지가 출력되는게 정상이다.

      Bp expression 'sample!DriverEntry' could not be resolved, adding deferred bp
    • g를 입력하거나 Go를 클릭하여 가상 머신을 다시 running 상태로 만들어준다.

  • 가상 머신에서 드라이버를 로딩하기 위해 관리자 권한의 CMD에서 다음을 입력한다.

    sc start sample
    • TESTSIGNING 모드에서만 정상적으로 작동된다.

    • 가상 머신이 Break 되어 조작이 불가능한 것을 볼 수 있다.

  • WinDbg를 확인해보면 브레이크 포인트로 설정한 함수의 코드를 볼 수 있고, 메뉴의 View 탭에서 콜스택이나 변수들에 대한 정보 등 많은 것을 확인할 수 있다.

    • Step into, Step over 등의 trace도 가능하다. 굉장히 강력한 디버깅 툴이다.

    • Go를 누르든 Step over로 진행하든 아무튼 디버깅을 마치고 가상 머신의 CMD로 가보면 다음과 같은 메시지가 출력되어 있다.

      [SC] StartService 실패 31:
      
      시스템에 부착된 장치가 작동하지 않습니다.
      • 이는 DriverEntry 함수가 STATUS_UNSUCCESSFUL을 반환하기 때문이다.
Windows/DeviceDriver 2021. 4. 20. 01:29

2. 윈도우 디버거 환경을 준비하자


WinDBG

  • MS Windows의 다용도 디버거이다.

  • 유저 모드 애플리케이션 뿐만 아니라 장치 드라이버나 커널 모드에서 운영체제 자체를 디버깅할 수도 있다.

  • GUI가 있으며 VS 디버거보다 강력하다.

  • 덤프 파일을 통해 디버깅할 수 있다.

고려 사항

  • 타겟 컴퓨터(가상 머신)의 부트 설정을 변경해야 한다.

    • 디버깅이 가능하도록 부트설정을 변경한다.

      • 가상 머신의 실행 창에서 msconfig 입력 후, 부팅 탭에서 고급 옵션에 들어간다.

      • 전역 디버그 설정에서 디버그 포트를 COM1, 전송 속도를 115200으로 맞추고 확인을 누른다.

      • 종료하지 않고 TESTSIGNING 모드 설정을 진행한다.

    • TESTSIGNING 모드 설정

      • 윈도우에서 드라이버가 작동하려면 MS로부터 인증을 받아야 하는데, 테스트 환경으로 부팅하면 이러한 인증 절차가 생략된다.

      • CMD를 관리자 권한으로 실행 후, 아래 명령어를 입력한다.

        bcdedit /set testsigning on
      • 완료되면 가상 머신을 종료한다.

  • 호스트 컴퓨터에서도 설정해야 하는게 두 가지 있다.

    • 디버깅할 타겟 컴퓨터와 연결할 방법을 결정한다. (가상 시리얼 포트)

      • VirtualBox 가상 머신의 설정에서 직렬 포트 탭에 들어간다.

        • 직렬 포트 사용에 체크하고, 포트 번호를 위에서 설정한 포트 번호와 맞춰준다.

        • 포트 모드를 Host Pipe로 설정하고, Connect to existing pipe/socket을 체크 해제한다.

        • 아래의 Path/Address에 다음과 같이 입력한다.

          \\.\pipe\com1

      • WinDbg(x64)에서 포트를 설정해야 한다.

        • File - Kernel Debug (Ctrl + K) 클릭 후 COM 탭으로 이동한다.

        • Pipe와 Reconnect에 체크하고 포트를 아래와 같이 작성한다.

    • 타겟 컴퓨터의 운영체제 심볼을 자동으로 받도록 설정한다.

      • C:\sym\websym 폴더를 생성한다.

      • WinDbg의 File - Symbol File Path를 클릭하고 아래 내용을 작성한다.

        C:\sym;
      • 우측의 Help를 클릭하여 Search 탭에 web symbol을 검색한다.

        • Microsoft public symbol server를 클릭하면 다음과 같이 나온다.

          The Microsoft symbol server makes Windows debugger symbols publicly available.
          
          You can refer directly to the public symbol server in your symbol path in the following manner:
          
          set _NT_SYMBOL_PATH=srv*DownstreamStore*https://msdl.microsoft.com/download/symbols
        • srv 이하 내용을 복사하여 아까의 세미콜론 뒤에 붙여넣고, DownstreamStore을 지우고 C:\sym\websym을 작성한다.

          C:\sym;srv*C:\sym\websym*https://msdl.microsoft.com/download/symbols
      • 설정을 저장하기 위해 File - SaveWorkspace를 클릭한다.

실습

  • 위의 과정을 모두 마치고나서 가상 머신을 작동시키면, WinDbg에서 커맨드 창이 열리고 다음과 같이 뜨는 것을 볼 수 있다.

    Microsoft (R) Windows Debugger Version 10.0.19041.685 AMD64
    Copyright (c) Microsoft Corporation. All rights reserved.
    
    Opened \\.\pipe\com1
    Waiting to reconnect...
    Connected to Windows 10 19041 x64 target at (Sun Apr 18 21:01:11.597 2021 (UTC + 9:00)), ptr64 TRUE
    Kernel Debugger connection established.
    
    ************* Path validation summary **************
    Response                         Time (ms)     Location
    OK                                             C:\sym
    Deferred                                       srv*C:\sym\websym*https://msdl.microsoft.com/download/symbols
    Symbol search path is: C:\sym;srv*C:\sym\websym*https://msdl.microsoft.com/download/symbols
    Executable search path is: 
    Windows 10 Kernel Version 19041 MP (1 procs) Free x64
    Built by: 19041.1.amd64fre.vb_release.191206-1406
    Machine Name:
    Kernel base = 0xfffff801`37800000 PsLoadedModuleList = 0xfffff801`3842a3b0
    System Uptime: 0 days 0:00:00.000
    KDTARGET: Refreshing KD connection
    Capacity:25500, FullChargedCapacity:50000, Voltage:10000, Rate:0
  • 메뉴 탭의 Break를 클릭하면, 가상 머신을 멈출 수 있고 커맨드 창에 다음 내용이 출력된다.

    Break instruction exception - code 80000003 (first chance)
    *******************************************************************************
    *                                                                             *
    *   You are seeing this message because you pressed either                    *
    *       CTRL+C (if you run console kernel debugger) or,                       *
    *       CTRL+BREAK (if you run GUI kernel debugger),                          *
    *   on your debugger machine's keyboard.                                      *
    *                                                                             *
    *                   THIS IS NOT A BUG OR A SYSTEM CRASH                       *
    *                                                                             *
    * If you did not intend to break into the debugger, press the "g" key, then   *
    * press the "Enter" key now.  This message might immediately reappear.  If it *
    * does, press "g" and "Enter" again.                                          *
    *                                                                             *
    *******************************************************************************
    nt!DbgBreakPointWithStatus:
    fffff801`37bfd0b0 cc              int     3
    • 다시 Go 버튼을 누를 때까지 가상 머신이 멈춘 상태로 유지된다.
Windows/DeviceDriver 2021. 4. 20. 01:28

1. 윈도우 드라이버 개발 환경 준비


WDK(Windows Driver Kit) 설치

  • https://docs.microsoft.com/en-us/windows-hardware/drivers/download-the-wdk 의 내용을 따라가면 된다.

  • Step 1 : Visual Studio 2019 설치

    • 설치할 때 Desktop development with C++을 선택하고, 우측 Installation details의 모든 항목을 체크하여 설치하는 것을 추천한다.

    • 다운로드 속도가 너무 느리면 VPN을 사용하거나, MS 다운로드 서버의 IP를 변경하면 된다고 한다.

      • 계속 You require permission from SYSTEM to make changes to this file 오류가 발생했는데, 백신이 실시간 감시로 차단하고 있었다...
  • Step 1.5 : 윈도우 10 2004 버전을 위한 SDK 10.0.19041.685 설치

    • 나는 왜인지 모르겠는데 VS에 같이 설치되어 있었다.
  • Step 2 : WDK 다운로드

  • EWDK는 IDE 없이 CLI로 윈도우 디바이스 드라이버를 개발할 수 있도록 제공하는 것이다.


WDK 7600 설치

  • 비주얼 스튜디오 없이 standalone으로 나온, 구버전의 WDK이다.

  • 도움말이 굉장히 훌륭해서, MSDN에 검색하지 않고 이 도움말을 활용하면 좋다고 한다.

  • 설치

    • 공식 사이트(https://www.microsoft.com/en-us/download/details.aspx?id=11800)에서 iso 파일을 받는다.

    • Explorer로 iso 파일을 열어서 마운트시킨다.

    • KitSetup.exe 파일을 실행하고, Help (Documentation Collection)만 체크하고 설치를 진행한다.

    • WDK Documentation을 검색해서 실행시킬 수 있다.

  • 왼쪽 아래의 Index 탭에서 검색하여 원하는 내용을 찾을 수 있다.


VirtualBox에 윈도우10 설치

  • 나는 윈도우 10 iso 이미지를 공식 홈페이지에서 다운로드 받은 후, VirtualBox에서 설치했다.

  • 강의에서는 최신 버전의 윈도우가 무겁기 때문에 구버전의 윈도우 10을 구해서 가볍고 빠르게 사용하기를 추천한다.


프로젝트 생성

  • VS에서 Kernel Mode Driver, USB(KMDF)를 선택하여 프로젝트를 생성한다.

  • x64로 변경 후 빌드해보면, 다음과 같은 에러가 발생한다.

    error MSB8040: Spectre-mitigated libraries are required for this project. Install them from the Visual Studio installer (Individual components tab) for any toolsets and architectures being used. Learn more: https://aka.ms/Ofhn4c
  • 이는 보안 요소에 관한 에러이고, 당장은 신경쓰지 않아도 되므로 설정에서 비활성화한다.

    • 프로젝트의 속성에서 C/C++ - Code Generation의 맨 아래 Spectre Mitigation 항목을 Disabled로 변경한다.
Windows 2021. 4. 13. 02:23

윈도우10 파일 탐색기 바로가기(Quick Access)에 자꾸 폴더가 추가되는 현상

  • 파일 탐색기의 View - Options에서 다음 항목을 체크해제하면 된다.

Windows 2021. 3. 29. 01:53

크롬 텍스트를 누르면 해당 위치에서 커서가 깜빡일 때

  • 텍스트를 클릭하면 텍스트 에디터처럼 해당 위치에서 커서가 깜빡이고, 방향키나 HOME, END키를 이용하여 이동할 수 있는 현상이 발생했다.

  • 찾아보니 크롬 설정에서 Accessibility(접근성) 항목 중 Navigate pages with a text cursor을 활성화하면 해당 기능을 사용할 수 있는 것이었다.

  • 아마 단축키인 F7을 잘못 눌러서 발생한 것 같다.

참고

Windows/WSL 2021. 3. 27. 14:41

WSL2(Windows Subsystem for Linux 2) 설치

설치

  • WSL을 먼저 설치하고 커널 패치로 버전을 업그레이드하는 방식이다.

  • 44bits의 글에 설명이 잘 되어있다. 따라서 하면 된다.

    https://www.44bits.io/ko/post/wsl2-install-and-basic-usage

    요약

    • WSL2를 사용하려면 윈도우10 2020년 5월 업데이트를 먼저 진행해야 한다.

    • Microsoft store에서 윈도우 터미널 설치 후, 관리자 모드로 실행하고 다음을 입력한다.

      dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
      dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
    • 리부팅

    • 윈도우 터미널에서 wsl을 입력하면 링크가 하나 뜨는데, 접속하여 원하는 리눅스를 설치한다. (나는 우분투)

    • 이름, 패스워드 설정하면 WSL가 설치된다. 다음 명령어로 확인 가능하다.

      wsl -l -v

    WSL2


설정

윈도우 터미널 기본 쉘 변경

  • 윈도우 터미널에서 아래 화살표모양을 누르고 Settings, 혹은 CTRL + ,으로 settings.json을 연다.

  • 아래 "list"에서 기본으로 설정할 쉘의 "guid"값을 복사하여 "defaultProfile"의 값으로 붙여넣기하면 된다.

경고음 음소거

Oh My Zsh 설치

  • https://github.com/ohmyzsh/ohmyzsh

  • 우분투 터미널에서 다음 명령어 입력

    sudo apt update
    sudo apt upgrade
    sudo apt install zsh -y
    sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
  • 테마

    • agnoster 테마로 설정했다.

      • ~/.zshrc의 테마를 ZSH_THEME="agnoster"로 설정 후 source ~/.zshrc
    • 맨 앞의 user@computer 생략

      • ~/.zshrc에서 DEFAULT_USER=user로 입력하고 source ~/.zshrc

VSCode와 WSL 연동

  • Remote - WSL 플러그인 다운로드

  • 좌측 하단의 초록색 코드모양(>< 겹친거) 클릭 후 나오는 Remote-WSL에서 필요한거 클릭

  • 플러그인은 로컬이랑 따로 받아야 하는 듯하다.

Windows 2021. 3. 1. 17:29

  • VSCode에 익숙해지니까 VS에 적응이 안된다.

mapping scheme 변경

  • Tools - Options (단축키 : Ctrl + ,(콤마))
    • 우측 하단을 드래그해서 창 크기를 조절 가능하다.
  • Environment - Keyboard에서 맨 위의 mapping schemeVisual Studio Code로 설정 후 OK


추가 변경

  • VSCode에서는 Shift + Alt + Up/Down으로 한줄을 복제할 수 있었는데, 이 설정은 따라오지 않아서 직접 바꿔줘야 한다.
  • Edit.Duplicate 항목의 단축키를 Shift + Alt + Up, Shift + Alt + Down으로 두 번 할당해준다.
  • Edit.LineUpExtendColumn, Edit.LineDownExtendColumn의 단축키 중 위에 해당하는 단축키들을 선택한 뒤 삭제해준다.


혹시 몰라서 VS와 VSCode 단축키 첨부

Windows 2021. 2. 28. 23:00

  • git bash를 실행할 때마다 홈에서 시작하는게 불편했다.

  • ~/.bashrc 파일에 다음을 입력한다.

cd 시작폴더
  • 껐다가 다시 시작하면 경고가 뜨는데, ~/.bash_profile 파일이 없어서 만들어줬다는 뜻인가보다.

  • 두 번째부터는 경고가 사라진다.

Windows 2021. 2. 28. 21:21

0x80070422

  • Windows Update를 끈 상태로 다운로드를 시도한 경우 발생

    • 실행 - services.msc 입력 후 Windows Update 항목 활성화
    • 참고

VirtualBox에서 윈도우 10 설치 시 kernel security check failure 에러

  • VirtualBox 최신 버전을 받았음에도 윈도우 10을 설치하면 커널 오류가 발생했다.

  • Hyper-V와 VirtualBox가 충돌하는 것 같다.

  • 제어판 - 프로그램 추가/제거에서 왼쪽의 Windows 기능 추가/제거Virtual Machine Platform을 끄고 리부팅하면 해결된다.

  • 대신 WSL2를 사용할 수 없다. 다음과 같은 오류가 발생한다.

    Please enable the Virtual Machine Platform Windows feature and ensure virtualization is enabled in the BIOS.
    For information please visit https://aka.ms/wsl2-install
    
    [코드 4294967295로 프로세스 종료됨]

'Windows' 카테고리의 다른 글

Visual Studio 단축키를 VSCode 단축키로 변경  (0) 2021.03.01
Git Bash 시작 폴더 설정  (0) 2021.02.28
윈도우 비밀번호 없이 로그인  (0) 2021.02.26
Typora 설치  (0) 2021.02.26
윈도우 설치 후 설정한 것들  (0) 2021.02.26
Windows 2021. 2. 26. 19:42

netplwiz

  • 실행 창에서 netplwiz 입력

  • 체크 박스가 보이면, 바로 해제하면 되는데 나는 그게 안떴다.


  • 실행 창에서 regedit 입력

    • Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device 경로로 이동

    • 클릭해서 찾아가기 힘든데, 화면 위 주소 창에 저거 복사해서 입력하면 된다.

    • DevicePasswordLessBuildVersion의 값이 2인걸 볼 수 있는데, 0으로 변경


  • 다시 실행 창에서 netplwiz 입력

    • 체크 해제 후 암호 입력


'Windows' 카테고리의 다른 글

Visual Studio 단축키를 VSCode 단축키로 변경  (0) 2021.03.01
Git Bash 시작 폴더 설정  (0) 2021.02.28
에러 관련  (0) 2021.02.28
Typora 설치  (0) 2021.02.26
윈도우 설치 후 설정한 것들  (0) 2021.02.26
Windows 2021. 2. 26. 19:17

Typora

  • 마크다운 에디터

설치


테마

  • File - Preference - Appearance
    • 맨 아래 Get Themes 클릭해서 괜찮아보이는 테마 들어가서 다운로드
    • 맨 아래 Open Theme Folder 클릭해서 폴더 열고, 다운로드 받은 css 및 내부 폴더 옮기기
    • 프로세스 종료 후 다시 켜서 테마 선택

기타 설정

  • Appearance
    • Window Style : Unibody
      • 사용은 좀 불편한데 좀 더 이쁘고, 단축키랑 사용법이 익숙해지면 문제 없을 듯하다.
  • Editor
    • Auto Pair
      • Auto pair common Markdown syntax
        • 쌍으로 잡아줘서 편한 것 같다.

여담

  • 2주 정도 사용했는데, 가끔 편집할 때 의도치 않게 인덴팅이 변하거나 하는 현상이 발생했다.
  • 뭔가 애매하게 불편해서 다시 VSCode로 작성하기로 했다.

'Windows' 카테고리의 다른 글

Visual Studio 단축키를 VSCode 단축키로 변경  (0) 2021.03.01
Git Bash 시작 폴더 설정  (0) 2021.02.28
에러 관련  (0) 2021.02.28
윈도우 비밀번호 없이 로그인  (0) 2021.02.26
윈도우 설치 후 설정한 것들  (0) 2021.02.26
Windows 2021. 2. 26. 16:09

  • SSD를 새로 구매하게 되어서, 깔끔하게 처음부터 설치하기로 결정했다.
  • Windows 10 Home 2004 19041.388 기준
  • 잡다한 설정을 피하기 위해 인터넷 연결을 끊은 채로 설치했다.

크롬

  • 동기화 필수

한글 설정

  • 영어 버전으로 윈도우를 설치했더니 한글이 나오지 않아서, 언어팩 설치

  • 설치가 다 되면 Windows key + Spacebar로 언어를 변경할 수 있다.

    • ALT + Shift를 누르면 알림창에 키를 Customize 할거냐고 물어보는데, 나는 눌러서 해당 키를 비활성화했다.
  • 리부팅하면 영어부터 나오는 현상

    • Edit language and keyboard options로 들어가서 Preferred languages의 순서를 드래그해서 바꿔준다.

키보드, 마우스 설정

  • 키보드는 한/영키 대신 CapsLock 키를 통해 한영전환을 하는 편이라서 레지스트리로 변경하여 설정했다.
  • 마우스도 휠을 반전시켜서 사용하는게 편하다.

드라이버 다운로드

  • CPU, 그래픽카드의 제조사에 들어가서 제품에 맞는 드라이버 설치
    • 라이젠 마스터
      • 약관을 쭉 내려야 동의 가능하다.
    • Geforce Experience
      • 설치 후 DRIVERS 탭에서 드라이버 다운로드 후 설치
  • 예전에는 그래픽 드라이버까지 설치해야 화면이 제대로 보였던 것 같은데, 지금은 윈도우만 설치해도 4k 지원이 된다.. 원래 그랬나

서드파티

  • 카카오톡
    • 설치할 때 다음을 기본 홈페이지로 설정 체크 해제
    • 로그인하기 전에 다른 곳에서 백업해두기
  • Avira
    • 설치하면 잡다한게 같이 깔리는데 삭제하기
      • 프로그램 추가/제거에서 Opera 삭제
        • 추가로 팬텀 VPN 이런 것도 있으면 삭제
      • 크롬 확장프로그램 삭제
  • 반디집
    • 설정에서 최신 버전 업데이트 체크 해제
  • Foxit Reader
    • PDF 뷰어
  • 꿀뷰
    • 이미지 뷰어
  • 픽픽
    • 이미지 캡쳐
    • 옵션
      • 업데이트 체크 해제
      • 캡쳐 - 캡쳐 결과 : 클립보드에 복사
      • 단축키 : 영역 지정 캡쳐 Shift + ALT + 4
  • 팟플레이어
    • 설치할 때 H.264 디코더 체크
      • 예전에 코덱을 따로 설치해야 했던 기억이 있어서, 연관 있을까봐 그냥 체크..
    • 설정에서 자동 업데이트 끄기
  • Aquasnap
    • Mac에서의 spectacles처럼 키조합으로 창의 크기, 위치를 조절할 수 있는 프로그램
  • 한컴오피스
  • MSOffice
  • 포토샵
  • Visual Studio Code
  • Visual Studio
    • Tools - Options - Color Theme : Dark

기타 유틸

  • CPU-Z
    • 컴퓨터 사양 확인
  • CrystalDiskInfo, CrystalDiskMark
    • 저장장치 정보, 벤치마크
  • ffmpeg
    • 간단한 영상 편집, 다운로드
  • HWMonitor
    • 하드웨어 모니터링
  • TreeSizeFree
    • 폴더 별로 용량 확인할 때 좋다.

다시 윈도우 설정

  • Microsoft Onedrive
    • 개인적으로 사용하지 않아서 삭제
  • 시작메뉴
    • 그림판, 제어판, 계산기 넣고 작은 사이즈로 변경
  • 정품 인증
    • 키가 있는데 정품인증이 계속 안돼서 이것저것 검색해봤다.
    • 결국 실행 창을 열고 slui 3을 입력 후 정품 키를 입력하니까 됐다. 분명 아깐 안됐는데..
  • Settings
    • Personalization
      • Colors
        • Custom color 설정
          • default Windows mode : Dark
          • default app mode : Light
      • Start
        • 전부 해제
      • Taskbar
        • 검색 창 등 잡다한거 숨기기
        • Small taskbar button 사용
        • Use Peek to preview the desktop ~ 사용
        • 팁 : Windows key + 숫자로 작업 표시줄에 고정한 프로그램 실행 가능
  • Microsoft 계정 로그인
    • 로그인하면 이전에 사용하던 설정이 로드됨
  • CPU 제한
    • 터보 부스트를 안쓰는 편이라, 전원 옵션에서 제한
    • Edit power plan 검색해서 들어간 후 Change advanced power settings 클릭
      • Processor power management - Maximum processor state 세팅 값 99%로 설정
  • 비밀번호 없이 로그인

970 evo 벤치

  • 방열판 X

  • 방열판 O (JONSBO)

  • 속도는 비슷한데 온도 차이가 꽤 나는 것 같다.

여기까지하면 용량을 대략 62GB정도 차지한다.

'Windows' 카테고리의 다른 글

Visual Studio 단축키를 VSCode 단축키로 변경  (0) 2021.03.01
Git Bash 시작 폴더 설정  (0) 2021.02.28
에러 관련  (0) 2021.02.28
윈도우 비밀번호 없이 로그인  (0) 2021.02.26
Typora 설치  (0) 2021.02.26
Windows/Registry 2020. 8. 13. 22:47

  • 맥을 쓰다보니 윈도우 키보드의 한영키가 불편하여 CapsLock을 한/영키로 리매핑하였다.

  • 오토핫키같은 프로그램은 별로 좋아하지 않아서, 레지스트리 변경을 통해 해결했다.


  1. Windows key + R실행 창을 열어서 regedit 입력

  1. 다음 경로로 이동

    • 주소창 같이 생긴 부분에 입력하면 된다.
    Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout
  2. 우클릭 -> New -> Binary Value(이진값) -> Scancode Map 입력

  1. 생성한 Scancode Map 더블클릭

  2. 다음과 같이 입력 후 OK

    00 00 00 00 00 00 00 00
    02 00 00 00 72 00 3A 00
    00 00 00 00

    간단 설명

    • 첫 8바이트는 0으로 채운다.

      • 첫 4바이트는 버전 정보, 나머지 4바이트는 헤더라는데 잘 모르겠다.
    • 그 다음 4바이트는 변경할 키의 개수 + 1 이다.

      • 리틀 엔디안임을 주의하자.
    • 4바이트씩 키를 매핑해준다.

      • 오른쪽 2바이트를 왼쪽 2바이트로 매핑하는 것이다.

        • 오른쪽의 키를 누르면 왼쪽 키가 눌린 것처럼 작동한다.
      • CapsLock(3A 00) -> 한/영(72 00)

      • 스캔 코드가 궁금하다면

    • 마지막 4바이트도 0으로 채운다.

  1. 재부팅하면 적용 완료
Windows/Registry 2020. 7. 25. 04:15

  1. 윈도우키 + X 혹은 시작 버튼 마우스 우클릭

  1. 명령 프롬프트 (관리자) 혹은 Windows PowerShell (Admin) 실행
  2. 다음 명령어를 복붙 후 엔터
Get-ItemProperty HKLM:\SYSTEM\CurrentControlSet\Enum\HID\*\*\Device` Parameters FlipFlopWheel -EA 0 | ForEach-Object { Set-ItemProperty $_.PSPath FlipFlopWheel 1 }

  1. 마우스 USB 분리 후 장착

  • 다시 원래대로 하려면
Get-ItemProperty HKLM:\SYSTEM\CurrentControlSet\Enum\HID\*\*\Device` Parameters FlipFlopWheel -EA 1 | ForEach-Object { Set-ItemProperty $_.PSPath FlipFlopWheel 0 }

'Windows'에 해당되는 글 27건