2010-06-20 4 views
1

Windows Native API에 대해 궁금합니다. 나는 그물 주변을 검색해 왔으며 사용자 모드에서 네이티브 API 함수를 호출하는 예제를 찾지 못했습니다. 나는 이것이 무엇을 수반하는지에 대한 기본적인 이해를 가지고 있다고 믿는다 - 구체적으로, 상수와 내 API 함수를 내 프로그램에 정의하고 GetProcAddress를 사용하여 ntdll.dll에서 함수를 찾은 다음 함수를 호출해야한다.사용자 모드에서 Windows Native API에 액세스

이것이 맞습니까? 누구든지 올바른 방향으로 나를 조종 할 수 있습니까? 샘플 코드는 내 하루를 만들 것입니다. 이 커널 모드에서 작동하도록 구성되어

나는 여기에이 코드 (http://www.eggheadcafe.com/software/aspnet/31520494/native-application--ntc.aspx)을 가로 질러왔다, 그러나 그것은 나에게 보인다

NTSTATUS ntStatus = STATUS_SUCCESS; 
UNICODE_STRING szPath = {0}; 
OBJECT_ATTRIBUTES Attr = {0}; 
IO_STATUS_BLOCK IoStatusBlock = {0}; 
HANDLE  hBeep = 0; 

RtlInitUnicodeString(&szPath, L"\\??\\C:\\A.TXT"); 
InitializeObjectAttributes(&Attr, &szPath, 0, NULL, NULL); 

ntStatus = NtCreateFile(&hBeep, GENERIC_READ, &Attr, &IoStatusBlock, NULL, 
0, FILE_SHARE_READ, FILE_OPEN, 0, NULL, 0); 

if (hBeep != NULL) 
{ 
NtClose(ntStatus); 

방법이 코드는 사용자 모드에서 작동하도록 수정 될 수 있을까? 나는이 시점에서 추측 한 것처럼 C++로 작업하고 있습니다.

미리 감사드립니다.

답변

2

문서화되지 않은 API를 사용하는 데 큰 팬이 아니지만 때때로 Win32 API에 의해 노출되지 않는 것을해야합니다. 네이티브 API의 일부는 MSDN에 문서화되어 있습니다 (아마도 합의로 인해). 보통 NTinternals.net에서 참조를 사용합니다. 그러나 잠시 동안 업데이트되지 않았으며 탐색을 위해 끔찍한 Java 애플릿을 사용합니다. 코드 프로젝트 (Code Project) 외에도 일부 코드 예제가 있습니다.

5

NtCreateFile()은 이미 사용자 모드 기능입니다. 드라이버 버전은 ZwCreateFile()입니다. 실제로는 documented이고, 선언은 winternl.h SDK 헤더 파일에서 사용할 수 있습니다. 그러나 누락 된 것은 ntdll.dll에 대한 가져 오기 라이브러리입니다. LoadLibrary 및 GetProcAddress를 사용하여 함수의 진입 점을 가져와야합니다.

이 API를 호출 할 때의 문제 외에도 이러한 기본 API 함수는 다음 버전의 Windows에서 예고없이 변경 될 수 있습니다.

관련 문제