Есть ли способ узнать, какая часть файла все еще находится в физической памяти после того, как она была прочитана каким-либо процессом?

Допустим, я использовал программу, которая прочитала файл, и программа была завершена. Теперь, скорее всего, части файла все еще находятся в физическом ОЗУ (допустим, у меня огромный объем ОЗУ).

Есть ли способ узнать, какие части файла находятся в физическом ОЗУ? Есть ли какой-нибудь инструмент, который может это сделать, или, может быть, вызов функции winapi?


person user88637    schedule 30.04.2009    source источник
comment
Какая оперативная память? Кэш процессора? Кэш второго уровня? Основная память? Кэш шины ввода-вывода? Кэш контроллера диска? О каком из них вы хотите узнать?   -  person S.Lott    schedule 30.04.2009
comment
Чего вы пытаетесь достичь? Является ли информация в файле конфиденциальной, и вы хотите стереть все ее следы?   -  person Coincoin    schedule 30.04.2009


Ответы (3)


Несколько моментов, которые следует помнить:

  1. У вас никогда не будет прямого доступа к физической оперативной памяти. ОС дает вам абстракцию оперативной памяти. Это может быть физическая оперативная память или виртуальная память на жестком диске. Вы никогда не можете знать.
  2. Даже если некоторые биты остаются спрятанными в какой-то части ОЗУ (физической или другой), ОС считает этот блок памяти свободным (если только он уже не был занят снова). Сомневаюсь, что вы сможете получить к нему доступ без какого-либо взлома ОС.

Позвольте мне уточнить мою точку зрения в отношении вашего комментария:

Предположим, вы открыли файл, прочитали его в ОЗУ, сделали с ним что-то, закрыли файл, и ваша программа завершилась. Во-первых, я думаю, мы все согласны с тем, что часть оперативной памяти, которую вы использовали, больше не используется и считается ОС свободной. Это означает, что другая программа, которая появляется и требует немного оперативной памяти, может получить этот блок памяти. Итак, во-первых, в этом блоке памяти больше ничего нет. Оно пустое. Бесплатно для ОС, чтобы использовать по своему усмотрению.

Теперь, даже если какие-то случайные биты данных остались висеть вокруг (помните, у вас нет возможности узнать, физические они или нет), у вас нет прямого доступа к ним.

Я надеюсь, что это проясняет.

person Yuval Adam    schedule 30.04.2009
comment
Джон Скит может не согласиться с этим. Он, вероятно, может удаленно взломать вашу оперативную память с помощью калькулятора, работающего на угле ;P - person Peter Perháč; 30.04.2009
comment
Спасибо за ответ. Но прочитайте внимательно мой вопрос. Мне не нужен прямой доступ к оперативной памяти, я просто хочу знать, какие файлы (или их часть) находятся в оперативной памяти. - person user88637; 30.04.2009
comment
@ yossi1981: Какая оперативная память? Оперативной памяти в современном процессоре много-много штук, вы про какие спрашиваете? - person S.Lott; 30.04.2009
comment
На самом деле это не так для Windows (серия NT). У них есть два бесплатных списка, один обнуленный, а другой еще не обнуленный. Любая страница, выделенная для вашего процесса, будет обнулена до того, как вы ее получите, поэтому вы не получите никаких данных из другого процесса. - person MSalters; 30.10.2009

если вы говорите о Windows, содержимое будет в файловом кеше Windows.

сейчас нет инструмента/API для чтения кэша файлов Windows.

Однако вы можете прочитать все содержимое вашей физической памяти по специальному имени, такому как CreateFile('\\.\PhysicalMemory') или по имени \Device\PhysicalMemory. (примечание: работает только на XP/2000)

person Francis    schedule 30.04.2009

> сейчас нет инструмента/API для чтения кэша файлов Windows.

Конечно есть apis (Win32 st) !

person Community    schedule 01.05.2009