시스템에 드라이브를 추가하거나 드라이브에 미디어를 삽입 할 때 (SHChangeNotifyRegister를 통해) 알림을 수신하기 위해 셸에 등록하는 트레이 응용 프로그램이 있습니다. 이러한 알림을 받으면 드라이브를 열어 일부 속성에 대한 쿼리를 시도합니다. 내 테스트를 위해 나는 간단한 USB 플래시 드라이브를 사용하고 있습니다. 이것은 실제 콘솔에 로그온 할 때 제대로 작동하지만 원격 데스크톱을 통해 로그온 한 경우 CreateFile 호출이 ERROR_ACCESS_DENIED와 함께 실패합니다.터미널 서비스 세션에서 이동식 드라이브에 액세스
나는대로를 CreateFile을 호출 오전 : szDrive 양식 "\\\\.\\G:"
의입니다
CreateFile(szDrive, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0 NULL);
. 이 후에 DeviceIoControl 호출을 몇 개 만듭니다.
이상한 점은이 프로세스 모니터를 실행하고 원격 데스크톱 시나리오에서 트레이 응용 프로그램의 드라이브에 CreateFile 레코드가 없다는 것입니다. 로그 파일을 작성하고 프로세스 모니터 로그의 로그 파일에 대한 CreateFile 호출을 보았 기 때문에 트레이 응용 프로그램에서 응용 프로그램을 호출하고 있음을 알았습니다. 그것은 마치 Process Monitor에 푹 빠져있는 것처럼 보이지 않습니다.
기기는 기본 설정 (예 : UAC)이 모두 설정된 Windows 7입니다. 내 계정이 로컬 관리자입니다. 두 시나리오 (로컬 및 원격 데스크톱)에서 표준 사용자 (즉 표고 없음)로 트레이 응용 프로그램을 실행하고 있습니다. 그러나 트레이 응용 프로그램을 높이면 원격 데스크톱 시나리오가 드라이브를 여는 데 성공한 것입니다.
이것은 결국 우리가 지원하지 않는 시나리오가 될 수 있습니다. 그러나 나는 아직도 여기서 무슨 일이 일어나고 있는지 알고 싶습니다. 어떤 아이디어?
편집 1 :이 문제를 다시 살펴본 후 모든 드라이브 (이동식 드라이브가 아닌)에서 발생하는 것으로 보입니다. 관찰 된 동작은 동일합니다 : CreateFile은 ERROR_ACCESS_DENIED로 실패하고 프로세스 모니터에는 로그가 없습니다.
EDIT 2 : 원격 로그온이 읽기 액세스가 거부되었습니다. GENERIC_READ를 0으로 바꾸면 드라이브가 성공적으로 열립니다 (DeviceIoControl 호출은 ERROR_ACCESS_DENIED와 함께 실패하지만). WinObj를 사용하여 원격 로그온에 드라이브에 대한 액세스 권한을 부여 할 수 있는지 확인하려고합니다.