last day (18 days later) » 

1:12 AM
0
Q: Как загружается в память .XML Файл DOM C++?

LighFusionХотелось бы узнать на Примере от - Microsoft VariantFromString(L"stocks.xml", varFileName); pXMLDom->load(varFileName, &varStatus); К какой функции ядра, идет обращение для открытия/чтения .xml файла, внутри метода - pXMLDom->load , к NtCreateFileA, NtCreateFileW, ReadFileA , либо какой ...

 
Уточните что вас интересует, неужели список функций ядра.
 
@Cerbo меня интересует какие функции ядра загружают XML Dom объект с диска в память, и как происходит процесс . Использует ли pXMLDom->load kernel CreateFileA&W, в исполняемом процессе, либо это происходит из другого глобального процесса ?
 
Никакие. Нет такой функции ядра "загрузить XML DOM объект с диска в память".
 
@PinkTux Понятное дело что нету я ведь говорю имел ввиду какая функция грузит XML Файл, как это происходит в самой функции pXMLDom->load, неужели придеться дизассемблить ?
 
pXMLDom->load не просто загружает файл в память, но и выполняет его разбор в коллекцию объектов. Этот разбор, в свою очередь, является «фишкой» библиотеки msxml6.dll, не имеющей к ядру Windows никакого отношения. То есть сначала она (библиотека), конечно, просит ядро отобразить голый набор байт в ОЗУ, но всё дальнейшее (разбор формата XML и порождение объектов) производит сама.
 
1:12 AM
@Arhad По средствам какой функции Ядра, идет набор байт в озу ? Разве ntCreateFile, ntReadFile ?
 
@Arhad, "отобразить голый набор байт в ОЗУ" (дословно) - не факт, если там используется SAX-подход, например :) Если же исходный вопрос в том, как именно открывается и читается файл, то смысл его не улавливается...
 
@PinkTux SAX-подход это отдельная функция ядра ?
 
Э... SAX
 
@PinkTux так а сам метод читает файл с диска - стандартно через CreateFile & ReadFile либо для этого предусмотрена отдельная функция ?
 
Ядро не умеет работать с XML-документами. Оно вообще не знает про существование какого-либо XML — это реализуется отдельными библиотеками, работающими за пределами ядра. Сам метод читает файл с диска — это лишь самый первый этап загрузки XML (копирование набора байт). Дальше должна произойти сборка этих байт в символы в определённой кодировке и разбор структуры документа. К этому ядро уже не имеет отношения; этим занимаются сторонние библиотеки, причём каждая из них делает разбор по своему.
Не надо думать, что ядро ОС — это универсальный всемогутер. Оно предоставляет только самые базовые вещи; всем остальным прикладные программы должны заниматься сами, либо внутри своего кода, либо привлекая на помощь сторонние библиотеки.
 
1:12 AM
@Arhad А вы внимательно смотрели что за вопрос я задал ?Я не спрашивал что за функция отвечает за парсинг содержимого XML, я спросил что за функции в ядре грузят XML с диска, для метода который я привел в пример ! Спасибо что хоть направили на нужную библиотеку, скорее всего придется ее дизасемблить
 
скорее всего придется ее дизасемблить - да чо уж там, дизассемблить, скорей всего, придётся COM полностью :-)
 
Диззассемблировать необязательно. Скачиваете Dependency Walker, открываете в нём нужную библиотеку и ищете в списке импортированных функций ту, которая отвечает за открытие. В вашем случае это CreateFileW() из kernel32.dll. А эта функция, скорее всего, вызывает NtCreateFileW(), если исходить из сходства названий обёрток и целевых функций.
 
@Arhad, Я чуть более чем уверен что файл там грузиться, не стандартным CreateFileW , ReadFileW ! Иначе бы в момент загрузки, при попытки удаления, Файл бы ругался на - "Используется Процессом", а такого не было.
 
Указание FILE_SHARE_DELETE в качестве флага при открытии файла позволит другим в дальнейшем удалять и переименовывать этот файл.
 
@Arhad ! Спасибо вы оказались правы ! именно этот флаг там и был dwDesiredAccess = v3 != 0 ? 0x40000000 : 2147483648; ! pastebin.com/DARirYZ0 , тогда и обращение идет к NtCreateFileW, NtReadFileW. А я думал там что то другое. Можете добавить как ответ, спасибо ! Хотя в память оно грузит иначе
 
VTT
1:12 AM
Этот метод может загружать данные из файла посредством интерфейса IStream. Соответственно доступ к файлу может происходить совершенно как угодно, в зависимости от конкретной реализации IStream.
 
Хотя в память оно грузит иначе -- переведите кто-нибудь это на человеческий язык, прошу :-)
 

  last day (18 days later) »