2012-05-11 1 views
0

PC에 설치된 Windows 버전을 식별해야하는 독립 실행 형 C++ 코드 (Windows 프로그램 아님)가 있습니다.Windows Server vs 클라이언트의 대역 외 프로그램 식 ID 번호

커널 버전 (예 : GetFileVersionInfo, ntoskrnl.exe)으로 다른 Windows 클라이언트 출시를 쉽게 구분할 수 있지만 클라이언트와 서버 설치를 구분할 수있는 확실한 방법이 있는지 궁금합니다.

이 방법을 사용하여 Windows Vista SP2와 Windows Server 2008 SP2 (6.0 빌드 6002 둘 다)와 Windows 7 및 Windows Server 2008 R2 (RTM 용 6.1 빌드 7600 및 6.1 빌드 7601 용)를 구분할 때 문제가 발생합니다. SP2, 둘 다). Win32 API에 액세스 할 수 없으므로 레지스트리를 피하는 것이 좋을 것입니다. 가능한 한 안정적입니까 (가능한 한 솔직하게). 클라이언트 대 서버 OS를 바깥에서 실행중인 코드에 대해 올바르게 식별하는 방법은 무엇입니까?

서버 버전에만있는 파일 (구성에 상관없이 모든 서버 에디션에 설치할 수 있도록 보장 된 좋은 파일은 무엇입니까?)을 확인할 수 있다고 가정합니다. 삭제할 수있는 Panther 폴더를 확인하십시오. 보증), 등등. 그러나 나는 이것이 사람들이 전에 만났던 (그리고 희망적으로) 더 우아하게 해결 된 문제라고 확신합니다.

: 나는 그래서, 당신이 밴드의 체크 아웃에 대해 무엇을 의미하는지 전혀 모르겠어요 ((!) 참고이 문제는 on SO before을 요청했지만,이 솔루션 (WMI)는 대역 외 검사하는 대상 외입니다)

+0

순수한 호기심에서 왜이 작업을 수행해야합니까? 나는 몇 시간 동안 숙고 해 왔으며 유스 케이스를 생각할 수 없다 ... –

+0

복구 소프트웨어의 특정 기능을 잠 그거나 잠금을 해제하는 것입니다. –

답변

0

일반적으로 Windows Server 버전과 관련된 system32 디렉토리의 여러 바이너리를 검색했습니다. 그것은 매우 깨끗하지는 않지만 실제로는 잘 작동합니다.

0

나는 그 순간을 무시할 것입니다.

GetVersionEx을 호출하고 OSVERSIONINFOEXwProductType 구성원을 확인하십시오.

+0

나는 내 포스트에서 "out-of-band"라는 말은 내가 * in * Windows가 아니며 Windows API에 액세스 할 수 없다는 것을 의미합니다. 'wProductType'을 살펴보고'ntoskrnl.exe'의 PE 헤더에서 가져올 수 있는지 확인합니다. –

+0

'GetVersionEx'가 어디서'OSVERSIONINFOEX'를 얻을 수 있는지 알고 있습니까? ntoskrnl.exe의 PE 개체 헤더에서 그 중 하나를 찾을 수 없습니다. http://pastebin.com/DTADp2EV –

+0

@ MahmoudAl-Qudsi : 나는 레지스트리에서 데이터를 가져온 것으로 확신합니다. 레지스트리를 수정하여 워크 스테이션을 서버와 유사하게 (더 많은 클라이언트 연결 등을 허용하는) 해킹을 서버의 복사본이라고 생각하는 해킹이있었습니다 (또는 한 번). 바이너리 파일 자체는 최소한 동일하게 사용되었습니다. 그것이 더 이상 사실인지 (NT4/Win2K 시간대에서 두드러지게 나타 났는지) 모르겠다. –

0

PE 이미지는 이미지가 클라이언트 또는 서버에서 작동해야하는지 여부를 지정하지 않습니다. 종속성, 의존성, 메모리, 선호도 등의 런타임 요구 사항 만 지정합니다 ...

+0

고마워,하지만 그건 내 질문에 대한 대답이 아니야. 이걸 의견으로 올리려는 것이 었습니까? –

+0

죄송합니다. 예, 의견입니다. :-) – mox

+0

참고로 답장 아래의 링크를 클릭하면 주석을 삭제하고 다시 게시 할 수 있습니다. 그리고, btw, PE 헤더에는 서브 시스템 정보가 포함되어 있고, 의존성 정보는 바이너리에서 가져올 수 있습니다.이 링크에서 서브 시스템 정보를 볼 수 있습니다 : http://pastebin.com/DTADp2EV –

관련 문제