C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[35264] Re:Re:[질문] HID 클래스를 이용한 USB 제어에서... CreateFile(...)
질문... [] 3335 읽음    2004-05-31 09:15
답변 감사합니다.
쪕... 음... 그럼 드라이버를 만들어서...

그런데욥 http://www.perisoft.net/bushound/index.htm 여기가면
bushound라는 프로그램을 받을 수 있는데
그 프로그램은 윈도우와 상관 없이 동작 되거든욥
모든 입려장치의 데이터 값을 Capture 하는 프로그램이랍니다.

이 프로그램을 보면 가능 할 것도 같은데 안되네요... 쪕
그래서 USB를 보면 레지스트리에
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\DeviceClasses\{4d1e55b2-f16f-11cf-88cb-001111000030}
여기가 USB관련 Path입니다.
그래서 간단히 핸들가져오는 루틴...
void __fastcall TFrmMain::Button1Click(TObject *Sender)
{
   char HIDDevicePath[] = "\\?\HID#Vid_04d8&Pid_0002#6&505ab01&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}";
   HANDLE hComm1 = CreateFile(HIDDevicePath,
                       GENERIC_READ | GENERIC_WRITE,
                       FILE_SHARE_READ | FILE_SHARE_WRITE ,
                       (LPSECURITY_ATTRIBUTES)NULL,
                       OPEN_EXISTING,
                       0,
                       NULL);
   DisplayLastError("CreateFile : ");
}
void __fastcall TFrmMain::DisplayLastError(AnsiString Operation)
{
        //Display a message and the last error in the log List Box.
    LPVOID lpMsgBuf;
    USHORT Index = 0;
    AnsiString strLastError = "";
    FormatMessage(
        FORMAT_MESSAGE_ALLOCATE_BUFFER |
        FORMAT_MESSAGE_FROM_SYSTEM |
        FORMAT_MESSAGE_IGNORE_INSERTS,
        NULL,
        GetLastError(),
        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
        (LPTSTR) &lpMsgBuf,
        0,
        NULL
    );

    //Display the last error.
    strLastError = Operation + (LPCTSTR)lpMsgBuf;
    //Trim CR/LF from the error message.
    strLastError.TrimRight();
    //Index = m_ResultsList.InsertString(-1, strLastError);
        ShowMessage(strLastError);
    LocalFree(lpMsgBuf);
}
를 해보면 열수가 없던군여.... 정말 디바이스 드라이버를 만들어야 한다면 난감.... 쪕
어디 아시는분...


김진영 님이 쓰신 글 :
: 안녕하세요
: winxp는 winnt계열의 운영체제이고요 winme는 win95계열 운영체제 입니다.
: winnt계열은 드라이버 없이 하드웨어를 '건드릴수'없습니다.
: win95에서 outportb같은 함수로 프린트포트등을 제어할 수 있지만 winnt계열에선 안되죠.
: io제어에 대한 권한은 cpu의 eflags 레지스터 안의 iopl값이 0이면 커널만 건드릴수 있고요 3이면 유저도 건드릴수 있습니다.
: nt는 0으로 세팅되어 있는거죠.
: 이걸 3으로 바꿀수도 있는데 바꾸는 작업 역시 커널만 할수 있습니다.
: 물론 커널모드 프로그램으로 바꿔야겠죠.
: 이건 윈도우api수준의 문제가 아니라 ddk,어셈블리수준의 문제입니다.
: 저도 이쪽은 잘 몰라서 설명을 못해드리겠네요.
: 대신 참고서적을 알려드릴게요.
: "windows 구조와 원리 그리고 codes", 정덕영저, 가남사
: 추신> 전 가남사와 아무런 관련이 없습니다
:
:
: 질문... 님이 쓰신 글 :
: : HID 클래스를 이용한 USB 제어에서...
: :
: : http://www.soft-gems.net/Controls.php 이곳에서
: : 델파이 와 빌더 HID 컴포넌트를 받을 수 있습니다.
: :
: : 설치하고 테스트 해보시면...
: : USB 마우스가 있으시다면 데이터가 들어오는 것을 보시수있습니다.
: :
: : .... 쪕....
: :
: : 그런데 동작이 XP... 그이상에선 USB의 Pnp는 확인이 되는데 데이타 입력이 안들어 오더군요
: :
: : 윈도우 Me에서는 데이터 입력이 아주 잘 들어오는데...
: :
: : 헉... 아무래도 HID클래스나 함수가 어떻해 된것같은데... 쪕.. 잘 몰라서...
: :
: : USB를 사용하려면 유용하실겁니다.
: :
: : XP... 나 그 이상에서 동작이 안되는 이유가 뭘까요?
: :
: : 위 URL 을  접속해서 설치 하시구 테스트 해보세욥 윈도우 ME에서는 아주 잘 됩니다 ^^;

+ -

관련 글 리스트
35237 [질문] HID 클래스를 이용한 USB 제어에서... 질문... 1910 2004/05/28
35258     Re:[질문] HID 클래스를 이용한 USB 제어에서... 김진영 2574 2004/05/30
35264         Re:Re:[질문] HID 클래스를 이용한 USB 제어에서... CreateFile(...) 질문... 3335 2004/05/31
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.