다음을 통해 공유


WDTF 단순 I/O 작업 플러그 인을 사용하여 디바이스에 대한 I/O를 사용자 지정하는 방법

Visual Studio 테스트 템플릿을 사용하여 작성한 디바이스 기본 테스트 및 테스트를 최대한 활용하려면 간단한 I/O 플러그 인에서 디바이스를 지원해야 합니다. 디바이스 유형이 지원되는지 확인하고 테스트에 대한 특정 요구 사항이 있는지 확인하려면 제공된 WDTF 단순 I/O 플러그 인을 참조하세요. 디바이스가 지원되지 않는 경우 WDTF 단순 I/O 작업 플러그 인 템플릿을 사용하여 Microsoft Visual Studio에서 플러그 인을 만들 수 있습니다.

사전 요구 사항

지침

1단계: WDTF 단순 I/O 작업 플러그 인에 대한 프로젝트 만들기

  1. 파일 메뉴에서 새 > 프로젝트를 클릭합니다.
  2. 새 프로젝트 대화 상자의 설치된 템플릿 목록에서 Visual C++ > Windows 드라이버 > 테스트 > WDTF 단순 I/O 작업 플러그 인을 선택합니다.
  3. 간단한 I/O 프로젝트의 이름과 위치를 제공합니다(또는 기본값 사용).
  4. 프로젝트 템플릿은 Visual Studio 솔루션을 생성합니다. 솔루션에는 디바이스에 대한 간단한 I/O 플러그 인을 만드는 데 필요한 모든 파일이 포함되어 있습니다. 파일 이름은 WDTF<프로젝트>SimpleIoAction*형식을 사용합니다. 단순 I/O 프로젝트의 기본 이름은 DeviceType입니다.
  5. 템플릿은 프로젝트에 대한 WDTF 단순 I/O 작업 인터페이스를 만듭니다. 인터페이스는 IWDTFTarget2 인터페이스의 instance 작동합니다.
  6. WDTF 간단한 I/O 플러그 인 솔루션을 빌드하여 필요한 모든 파일이 있는지 확인합니다.
  7. 구현 파일에 코드를 추가하여 대상을 설정하고 단순 I/O 작업(열기, 닫기 및 RunIO)을 구현하는 메서드를 구현합니다. 파일 이름은 CWDTF프로젝트SimpleIoActionImpl.cpp 파일 형식을 사용합니다.

2단계: 디바이스에 대한 SetTarget 메서드 구현

  • 프로젝트의 구현 파일(예: CWDTFmyDeviceTypeSimpleIoActionImpl.cpp)을 열고 IAction::SetTarget SetTarget 메서드의 instance 찾습니다. 이 메서드에는 주석 및 TODO로 표시된 섹션이 있습니다. 디바이스와의 호환성을 확인하는 코드를 구현해야 하는 위치를 나타냅니다.

    SetTarget 메서드는 각 instance 대해 WDTF에서 한 번 호출됩니다. 다음과 같은 두 가지 기본 목적이 있습니다.

    • WDTF에서 개체가 디바이스 대상을 지원하는지 확인할 수 있도록 pMainTarget
    • CWDTF<프로젝트>SimpleIoActionImpl instance 대상에서 필요한 정보를 가져와 나중에 Open() , Close() , RunIO() 메서드 호출을 수행할 수 있도록 합니다.

    이 메서드의 구현은 대상이 지원되지 않음을 나타내기 위해 E_NOINTERFACE 반환해야 합니다. 대상이 지원되는 경우 메서드는 S_OK 반환해야 합니다. 다른 오류가 발생하는 경우 메서드는 오류를 나타내기 위해 HRESULT를 반환해야 합니다.

    
        ////
        // TODO: 1)  Perform your checks to see if your implementation is compatible with the target.
        //       Use the ITarget::GetValue() & ITarget::Eval() method to get the necessary data , info 
        //       to determine that. 
        //       2)  Also get the necessary info and save it in a member variable 
        //       to accomplish the later Open() method call.
    

3단계: SimpleIoAction을 구현하여 인터페이스 열기

다음으로 제공된 Open() 메서드를 구현하여 테스트를 위해 ITarget을 열어야 합니다.

Open 메서드는 대상 디바이스를 열려고 시도해야 합니다. 메서드가 이 작업을 수행할 수 없는 경우 메서드는 실패를 나타내는 HRESULT를 반환해야 합니다. SimpleIO 인터페이스가 이미 열려 있는 경우 이 메서드가 실패해야 합니다(초기화됨). 이 메서드를 구현하는 방법은 ITarget 형식과 상황에 가장 적합한 항목에 따라 달라집니다. 즉, CreateFile()을 사용하여 핸들을 열어야 합니다. 진행 중인 테스트 사례를 추적할 수 있도록 컨텍스트 구조를 초기화한다는 의미일 수 있습니다. 오류가 발생할 경우 메서드는 COMReportError()를 사용하는 것이 가장 적합하며 오류에 대한 설명과 향후 발생을 방지하는 데 도움이 될 수 있는 정보 또는 단계를 제공해야 합니다.

참고 ISimpleIO_Action 이미 열려 있는 경우 이 메서드는 실패해야 합니다.

  • 프로젝트의 구현 파일(예: CWDTFmyDeviceTypeSimpleIoActionImpl.cpp)을 열고 Open 메서드의 instance 찾습니다. 이 메서드에는 주석 및 TODO로 표시된 섹션이 있습니다.

    //
       //   TODO: Add code for your implementation of Open() here.
       //
       //
       //  To return failure use COMReportError(,,,).  For example the following 
       //  will return E_FAIL as the error code and "My Device error String"  as
       //  the error string.
       //
       //  COMReportError(WDTF, E_FAIL, "My Device error String");
       //
    

4단계: SimpleIoAction 메서드를 구현하여 인터페이스 닫기

이 메서드는 이전에 연 테스트 컨텍스트를 닫아야 합니다. 실패한 HRESULT를 보고해야 하는 경우에도 컨텍스트를 지워야 합니다. 닫을 때 발생하는 오류가 실제로 적합한 경우는 몇 가지에 불과합니다. 이 메서드에서는 Open()에서 수행한 작업을 되돌리기 합니다. 이는 CloseHandle()을 사용하여 이전에 연 핸들을 닫아야 한다는 의미일 수 있습니다. 오류가 발생할 경우 실행 가능한 설명을 제공하세요.

참고 ISimpleIO_Action 이미 닫혀 있거나 열린 적이 없는 경우 이 메서드는 실패해야 합니다.

  • 프로젝트의 구현 파일(예: CWDTFmyDeviceTypeSimpleIoActionImpl.cpp)을 열고 Close 메서드의 instance 습니다. 이 메서드에는 주석 및 TODO로 표시된 섹션이 있습니다.

    //
       //  //
       //   TODO: Add code for your implementation of Close() here.
       //
       // 
       //
       //  To return failure use COMReportError(,,,).  For example the following 
       //  will return E_FAIL as the error code and "My Device error String"  as
       //  the error string.
       //
       //  COMReportError(WDTF, E_FAIL, "My Device error String");
       //
    
       //
    

5단계: SimpleIoAction 메서드를 구현하여 간단한 I/O 작업 수행

이 메서드는 대상에 대해 적은 수의 입력 및 출력 작업을 수행해야 합니다. 그런 다음 메서드는 I/O 작업이 올바르게 완료되었는지 확인해야 합니다. 그런 다음 각 테스트에서 디바이스에 대한 I/O를 수행하는 기간을 제어할 수 있습니다. RunIo() 메서드에 대한 각 호출은 소량의 I/O 만 수행해야 합니다. WDTF는 루프에서 RunIo()를 반복적으로 호출하여 더 많은 I/O를 수행합니다. 일반적으로 단일 RunIo() 메서드 호출을 몇 초 동안 유지합니다.

참고 ISimpleIO_Action 현재 닫혀 있는 경우 이 메서드는 실패해야 합니다.

  • 프로젝트의 구현 파일(예: CWDTFmyDeviceTypeSimpleIoActionImpl.cpp)을 열고 RunIO 메서드의 instance 찾습니다. 이 메서드에는 주석 및 TODO로 표시된 섹션이 있습니다.

    //
       //  //
       //   TODO: Add code for your implmentaiton of RunIO() here.
       //
       // 
       //
       //  To return failure use COMReportError(,,,).  For example the following 
       //  will return E_FAIL as the error code and "My Device error String"  as
       //  the error string.
       //
       //  COMReportError(WDTF, E_FAIL, "My Device error String");
       //
    
       //
    

6단계: 간단한 I/O 작업 플러그 인 빌드 및 설치

아직 수행하지 않은 경우 테스트를 위해 컴퓨터를 구성해야 합니다. 자세한 내용은 드라이버 배포 및 테스트를 위한 컴퓨터 프로비전(WDK 8.1) 또는 드라이버 배포 및 테스트를 위한 컴퓨터 프로비전(WDK 8)을 참조하세요.

  1. 솔루션을 빌드합니다.

    간단한 I/O 작업 플러그 인을 빌드하면 두 개의 테스트가 만들어집니다. 이러한 테스트는 테스트 컴퓨터에 플러그 인을 설치하고 제거합니다. 기본적으로 단순 I/O 작업 플러그 인 파일은 테스트 그룹 Explorer 테스트 범주 내 테스트 범주에 표시됩니다.

  2. 간단한 I/O 작업 플러그 인을 설치하려면 테스트 컴퓨터에서 WDTF<프로젝트>SimpleIOAction.DLL 등록이라는 테스트를 실행합니다. 테스트를 선택하고 실행하는 방법에 대한 자세한 내용은 Visual Studio를 사용하여 런타임에 드라이버를 테스트하는 방법을 참조하세요.

  3. 단순 I/O 작업 플러그 인이 설치되어 있는지 확인하려면 테스트 컴퓨터에서 WDTF 단순 I/O 플러그 인 테스트가 있는 디스플레이 디바이스 를 실행합니다. 플러그 인 및 디바이스가 결과에 표시됩니다. 자세한 내용은 디바이스에 사용자 지정 WDTF 단순 I/O 작업 플러그 인이 필요한지 확인하는 방법을 참조하세요.

  4. 단순 I/O 작업 플러그 인을 제거하려면 테스트 컴퓨터에서 WDTF<Project>SimpleIOAction.DLL 등록 취소라는 테스트를 실행합니다. WDTF 단순 I/O 플러그 인 테스트가 있는 디스플레이 디바이스를 실행하여 플러그 인을 제거했는지 확인할 수 있습니다.

TAEF(테스트 작성 및 실행 프레임워크)
디바이스에 사용자 지정 WDTF 단순 I/O 작업 플러그 인이 필요한지 확인하는 방법
Visual Studio를 사용하여 런타임에 드라이버를 테스트하는 방법