32 비트 프로그램에서 64 비트 드라이버를 사용합니다. 창

StackOverflow https://stackoverflow.com/questions/602587

  •  03-07-2019
  •  | 
  •  

문제

이것은 단지 중간 프로그래밍 질문입니다. 우선 PCI-Express 카드와 32/64 비트 드라이버가 있습니다. 대상 운영 체제는 Windows 64 비트 시스템이어야합니다. Vista64에서 모든 드라이버는 64 비트 드라이버 인증을 받아야한다고 읽었습니다. 이것은 64 비트 운영 체제에서 일반적인 제한입니까? 이것이 "XP 64"또는 Linux 시스템에도 적용됩니까?

따라서 단순화를 위해 Vista64의 PCIE 카드에 64 비트 드라이버를 사용하고 카드 기능을 사용하기 위해 64 비트 DLL을 가지고 있다고 가정 해 봅시다. 다른쪽에는 PCIE 장치를 사용해야하는 큰 레거시 32 비트 EXE 프로그램이 있습니다. 프로그램을 64 비트로 변환하는 것은 정말 큰 노력이 될 것입니다.

그렇다면 32 비트 프로그램과 64 비트 드라이버를 모으기 위해 무엇을 할 수 있습니까? 나는 32/64 비트 바이너리와 DLL을 혼합하는 것이 전혀 불가능하다는 것을 읽었지만 이것은 나를 믿기 어렵다. 32 비트 앱 내에서 Vista64에 따라 문서를 인쇄 할 수 있다고 확신하며 Windows는 어떻게 든 64 비트 프린터 드라이버로 포장 할 것입니다.

도움이 되었습니까?

해결책

64 비트 인증은 Vista에서만 필요합니다. 비 원도 플랫폼에 대한 인증 기관은 없으며 XP 또는 Windows 서버가 인증을 확인하는 것을 믿지 않습니다 (확실하지 않으며 어떤 서비스 팩에 따라 다를 수 있음).

Windows API를 통해 드라이버를 사용하는 경우 아무런 문제가 없습니다. Windows는 커널에서 32 <-> 64 비트 변환을 수행합니다. 자신의 프로세스 내부에 드라이버를로드하려고한다면 아마도 가능하지 않을 것입니다. Dirk가 말했듯이 자체 프로세스 내에서 실행하고 COM 서버를 통해 통신해야합니다. 운전자를 고급 실행 수준에서 실행하고 사용자 모드에서 전화를 걸고 싶다면 어떤 후프를 뛰어 넘어야하는지 잘 모르겠습니다.

64 비트 DLL이 32 비트 API를 제공하거나 Windows가 표준 드라이버 인터페이스를 제공하기를 바랍니다 (디스플레이 또는 네트워크 카드와 같은 일반적인 I/O 장치 인 경우).

다른 팁

32 비트 응용 프로그램이 운전자에게 직접 전화합니까? (드라이버를위한 시뮬레이터를 추측하고 있습니다!)

32 비트와 64 비트 DLL을 통신하는 유일한 방법은 COM 서버를 작성하는 것입니다 (읽기 : 응용 프로그램 호출 또는 64 비트 드라이버 응답을 랩핑).

물기로 돌아온 한 가지 : 내가이 COM 서버를 처음 썼을 때 (예, 나는이 트릭을 알기 전에 잠들지 않는 밤을 많이 견뎌야했습니다) 나는 32 비트 버전의 (자동 생성 된 버전 만 만들었습니다. ) 프록시/스터브 DLL. 솔루션을 알기 전에 잠들지 않는 밤의 또 다른 한판 승부는 다음과 같습니다. 32 비트 측면은 32 비트 측면 (귀하의 경우 응용 프로그램)과 64 비트 (드라이버)와 64 비트를 처리합니다. COM은 프록시/스텁의 다른 버전이 서로 어떻게 대화하는지 관리합니다. 그리고 아, 시스템에 서버를 등록하십시오. 쉽지?

드라이버의 요점은 하드웨어의 실제로 작동을 추상화하고 소프트웨어에 대한 일반적인 인터페이스를 제시하는 것입니다. 이 경우 PCIE 드라이버는 64 비트 여야하여 Windows와 하드웨어의 중간으로 작동 할 수 있지만 32 비트 응용 프로그램은 전혀 문제없이 장치에 액세스 할 수 있다고 생각합니다.

당신이 읽은 비 호환성의 의미는 32 및 64 비트 어셈블리가 동일한 응용 프로그램의 일부가 될 수 없다는 것입니다. 일반적으로 번역기 역할을하는 WOW64를 사용하여 Windows X64에서 잘 실행됩니다.

현재 문제가 발생하고 있습니까, 아니면 가설 적으로 물어보고 있습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top