메뉴 건너뛰기

그외 개발정보


INF 파일을 이용한 드라이버 자동 설치를 구현중입니다...

여러가지 방법이 있더군여....

1. 인스톨쉴드를 이용한 방법
2. DDK 에서 Exe 파일을 만들어 사용하는 방법
3. INF, SYS 파일을 시스템 폴더에 복사후 레지스터 등록하는 방법


제가 선택한 방법은 2번인 DDK를 이용한 방법입니다...

우선적으로 여기있는 자료나 데브피아에 있는 자료는 거의 모두 살펴보았는데, 정확한 답은 찾지 못하였습니다.

관련된 자료나 예제 소스 있으면 부탁드리겠습니다..


가장 근접한 자료로 데브피아에 있는 자료를 보고 SetupCopyOEMInf 이용하여 콘솔에서 exe 파일로 구현하였는데(DevPartner/Driver Studio Lecture & Tip에 45번)

그 내용은 다음과 같습니다... 근데 문제는 이놈이 정상적으로 실행되는지가 궁금합니다.. 컴파일은 정상적으로 이루어 지는데, SetupCopyOEMInf는 실행되지 않습니다.


// test.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <stdio.h>
#include <tchar.h> // Make all functions UNICODE safe.
#include <windows.h>
#include <newdev.h> // for the API UpdateDriverForPlugAndPlayDevices().
#include <setupapi.h> // for SetupDiXxx functions.
//#include <initguid.h>
int DisplayError(TCHAR * ErrorName);


int main(int argc, char* argv[])
{
if(!SetupCopyOEMInf(
".\\USBW9967.inf", //inf 파일명 : 사용하는 inf파일명 지정
NULL,
SPOST_PATH,
SP_COPY_NOOVERWRITE,
NULL,
8, // inf파일명 길이, 파일 내용의 크기가 아니라 파일명의 길이임.
NULL,
NULL))
{
DisplayError(TEXT("Setup Copy OEMInf Error"));
}

return 0;
}

int DisplayError(TCHAR * ErrorName)
/*++
Routine Description:

This Routine will display the LastError in human readable
form when possible.

If the return value is a 32-bit number, and falls in the range:
ERROR_NO_ASSOCIATED_CLASS 0xE0000200
To
ERROR_CANT_REMOVE_DEVINST 0xE0000232
The values defined in setupapi.h can help to determine the error.
Start by searching for the text string ERROR_NO_ASSOCIATED_CLASS.

Arguments:

ErrorName: Human readable description of the last Function called.

Return Value:

Allways returns FALSE.

--*/
{
DWORD Err = GetLastError();
LPVOID lpMessageBuffer = NULL;

if (FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER or FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
Err,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &lpMessageBuffer,
0,
NULL ))
_tprintf(TEXT("%s Fail: %s\n"),ErrorName,(TCHAR *)lpMessageBuffer);
else
_tprintf(TEXT("%s FAILURE: (0x%08x)\n"),ErrorName,Err);

if (lpMessageBuffer) LocalFree( lpMessageBuffer ); // Free system buffer

SetLastError(Err);
return FALSE;
}


위에 소스를 돌리면 다음과 같은 결과가 나옵니다.

결과 :
Setup Copy OEMInf Error : 파일이 있습니다.




  • profile
    네, 어차피 Windows도 inf파일에 작성된 내용에 따라 레지스트리를 생성하고, 드라이버를 로드 합니다. 그러니, inf에서 세팅하는 레지스트리 정보를 알고, 드라이버를 로드하는 어플리케이션을 작성한다면, 굳이 inf가 없어도 되겠죠?
    하지만 usb인 경우는 있어야 하는 것으로 알고 있습니다.(자세한건 더 알아봐야 합니다만..)
    움...
    inf섹션들을 저도 아직 다 이해하고 있지는 않지만, 모두가 아니라 어느정도 구현해 줘야 할것들만 어플리케이션에서 세팅해주고, 드라이버를 로드하기만 하면 되는 것으로 알고 있습니다.

    그리고, 칸트책의 Install.cpp 도 상세히 참조 하시구요.
    물론, inf파일을 이용하여 인스톨 쉴드에서 설치가 가능한 것은 알고 있지만, INF를 이용한 설치 기능을 제가 해본 적이 없네요...(레지스트리 세팅정도로만 설치가 가능한 드라이버 였기 때문에... ㅠ.ㅠ)

    제가 작성했던 드라이버는 PnP 디바이스용이 아니었기 때문에 경험에 의한 답이 아니라 죄송합니다만,
    Walter Oney의 책등에서 아마 찾으시는 상세한 내용을 얻으실 수 있을 것 같습니다.

    다시 말씀드리지만, SetupDi??? 로 시작하는 API들을 참조하시구요, Walter Oney의 책을 참고 하시면 도움이 되실거라 생각됩니다.(아.. 이직하면서 이책을 누굴 줘버리는 바람에... 상세한 부분을 짚어 드릴수가 없네요...@.@)


    시원한 해답이 아니라 죄송합니다. T.T

  • profile
    안녕하세요- 반갑습니다.
    님이 작성하신 그 소스는 저도 예전에 사용해 보려고 시도를 했었는데...
    잘-안되더군요.

    어떤 형태의 드라이버를 설치하려 하시는 건지요?
    굳이 inf을 사용하지 않고서도 얼마든지 설치할 수 있는 드라이버도 있습니다만... .

제목 날짜
mouclass 접근.. 3 2010.03.13
[TIP] NEXUS(넥서스) 5x 루팅 방법입니다. 2016.01.05
class callback호출시 에러가 나는데 뭐가 문제인지 모르겠습니다..ㅠㅠ 1 2006.07.22
inf 파일을 이용한 드라이버 자동 설치 2 2003.09.23
232통신 데이타 질문 1 2003.09.08
keyboard filter에 쓰기 기능 3 2003.09.06
수신값이 좀 애매해서...요 1 2003.08.25
각각 다른값을 수신측에 보낼려면 2003.08.23
데브피아에 글을올린 김태완입니다. 2003.08.21
[질문]VxD에서 Event 오브젝트 사용방법 1 2003.06.17
디바이스 제어 프로그래밍을 공부하고 싶은데요.. 1 2003.06.12
[심볼서버 사용법]커널 디버깅에서 원하는 심볼 파일 다운 방법 2003.04.28
운영체제, 드라이버, 디바이스 그리고 어플리케이션 그 모든것의 개념 2003.03.17
OS 개발관련 사이트 링크 모음 2003.03.14
간단히 파헤치는 PC의 부팅과 OS로드 과정 2002.11.30
PCI to ISA Bridge를 사용한 경우 드라이버는? 1 2002.11.19
최근에 찾은 드라이버 관련 사이트들 2002.10.14
잘구현된 uC/OS Task Switching 데모 2002.07.09
[초보용강좌]디바이스 드라이버가 무엇인고..? 2002.06.20
Porting uC/OS-II to the x86 Protected Mode 2002.03.30
Soft ICE 기존 사용법 및 내용추가 2002.02.25
WDM 덧셈 API 만들기 Sample 2000.06.25
태그 목록
위로