Я разработал приложение для Windows, которое использует разделяемую память, то есть файлы, отображаемые в память, для межпроцессного взаимодействия. У меня есть служба Windows, которая выполняет некоторую обработку и периодически записывает данные в отображенный файл памяти. У меня есть отдельное приложение для Windows, которое читает из отображенного файла памяти и отображает информацию. Приложение работает должным образом на Windows XP, XP Pro и Server 2003, но НЕ на Vista.
Я вижу, что данные, записываемые в отображенный в память файл, корректно обрабатываются службой Windows, потому что я могу открыть файл в текстовом редакторе и просмотреть сохраненные сообщения, но приложение «потребителя» не может прочитать файл. Здесь следует отметить одну интересную вещь: если я закрою потребительское приложение и перезапущу его, оно будет использовать сообщения, которые ранее были записаны в файл отображения памяти.
Кроме того, еще одна странная вещь заключается в том, что я получаю такое же поведение, когда подключаюсь к хосту Windows с помощью удаленного рабочего стола и запускаю / использую приложение потребителя через удаленный рабочий стол. Однако, если я вызываю удаленный рабочий стол и подключаюсь к сеансу консоли целевого хоста с помощью следующей команды: mstsc -v:servername /F -console
, все работает отлично.
Так вот почему я думаю, что проблема связана с разрешениями. Кто-нибудь может прокомментировать это?
EDIT:
ACL, который я использую для создания файла отображения памяти и объектов Mutex, которые синхронизируют доступ, выглядит следующим образом:
TCHAR * szSD = TEXT("D:")
TEXT("(A;;RPWPCCDCLCSWRCWDWOGAFA;;;S-1-1-0)")
TEXT("(A;;GA;;;BG)")
TEXT("(A;;GA;;;AN)")
TEXT("(A;;GA;;;AU)")
TEXT("(A;;GA;;;LS)")
TEXT("(A;;GA;;;RD)")
TEXT("(A;;GA;;;WD)")
TEXT("(A;;GA;;;BA)");
Я думаю, что это может быть частью проблемы.