2012-12-10 3 views
1

말, 나는 지금 h은 GENERIC_READ있다 처리W32 핸들 액세스를 얻으려면 어떻게해야합니까?

HANDLE h = CreateFileA ("foobar", GENERIC_READ | GENERIC_WRITE, 0, NULL, 
    OPEN_ALWAYS, 0, NULL); 

했다 | GENERIC_WRITE 액세스 (호출이 성공한 경우).

질문 : 내가 h에 호출해야 어떤 기능의 액세스 모드를 다시 얻을 수 있습니다 (즉, GENERIC_READ | GENERIC_WRITE를)?

: GetStdHandle (STD_INPUT_HANDLE) 반환 어떻게 든이 표준 입력 었죠 몇 가지 핸들입니다. 파일인지, 파이프인지 또는 다른 것인지는 알 수 없습니다 (핸들 유형을 얻는 방법이 있지만 여기에는 그다지 중요하지 않습니다). 그리고 그것은 어떤 접근 (CreateProcess 당신이 STARTUPINFO에 그것을 제공 핸들을 확인하지 않습니다)있을 수 있습니다. 해당 액세스 마스크를 얻을 수있는 방법이 있습니까 (적절한 호출을 시도하는 것 외에는)?

답변

1

ObjectBasicInformation으로 NtQueryObject으로 전화하십시오.

+0

작동! 재미있는 사실 : NtQueryObject가 제공하는 가치에 따르면 W32 (NT 6.1.7601)는 항상 FILE_READ_ATTRIBUTES | 요청 여부와 상관없이 동기화하십시오. 최소한 일반 파일을 열 때. – LRN

관련 문제