Member 12967873 Ответов: 2

Как получить доступ или дать разрешение процессу на чтение защищенной памяти из другого процесса


привет
я создаю приложение в visual studio c# для работы с устройством.
в какой-то момент у меня есть дескриптор устройства в переменной intptr.

затем у меня есть еще один процесс, который должен использовать тот же самый дескриптор.
я передал эту информацию, сделав это в основном приложении:

IntPtr h = ; // " функция, возвращающая дескриптор устройства"
ProcessStartInfo p = новый ProcessStartInfo("otherapp.exe", h. ToString());
Процесс.Начало (p);

а в другом приложении я ловлю строковый параметр и затем делаю это:

IntPtr h = new IntPtr(Int32. Parse(args[0]));

пока все работает, но когда я пытаюсь использовать новый дескриптор во втором приложении, он выдает ошибку:
попытка доступа к защищенной памяти

кто-нибудь может мне помочь, пожалуйста????

Что я уже пробовал:

the way i passed this information was by doing this in the primary app:

IntPtr h = ;//"the function that returns the device handle"
ProcessStartInfo p = new ProcessStartInfo("otherapp.exe", h.ToString());
Process.Start(p);

and in the other app i catch the string parameter and then do this:

IntPtr h = new IntPtr(Int32.Parse(args[0]));

so far everything works but when i try to use the new handle in the second app it throws an error:
trying to access protected memory

Richard MacCutchan

Если бы было возможно сделать то, что вы пытаетесь, то каждый компьютер во Вселенной был бы уничтожен в мгновение ока.
Вам нужно создать объект общей памяти, к которому могут получить доступ оба процесса.

2 Ответов

Рейтинг:
2

RickZeeland

Не очень элегантно, но вы могли бы использовать unsafe ключевое слово.
Вот объяснение: Как использовать указатели для копирования массива байтов (руководство по программированию на C# )[^]


#realJSOP

Не думаю, что это ему поможет. Современные версии Windows устанавливают барьеры между процессами, чтобы специально запретить такой доступ

Рейтинг:
2

Dave Kreskowiak

Я думаю, что ты идешь по неверному пути. Вместо того чтобы иметь два разных приложения, пытающихся получить доступ к одному и тому же дескриптору, что, кстати, предотвращается безопасностью, вам нужен только один.

Создайте приложение, которое обрабатывает весь доступ к рассматриваемому устройству и выполняет все критические функции. Тогда вы не передаете дескриптор другим приложениям. Вы, другие приложения, можете сказать этому приложению, что делать с устройством/ручкой, которое у него есть. межпроцессное взаимодействие (например, именованные каналы) гораздо проще, чем возиться с безопасностью, пытаясь заставить это работать.