Шаг 70 - Создаем файл CreateStream()

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

HRESULT CreateStream
(
	const WCHAR *pwcsName,	//указатель на имя потока
	DWORD grfMode,		//режим доступа
	DWORD reserved1,		//зарезервировано 0
	DWORD reserved2,		//зарезервировано 0
	IStream **ppstm		//указатель на новый объект
);

Кодов возврата может быть много, главный S_OK, который прямо говорит - все окей. Смотрим пример:

#include "stdafx.h"
#include "windows.h"
#include "ole2.h"
#include "iostream.h"

int main(int argc, char* argv[])
{
	OLECHAR filename[20];
	wcscpy(filename,L"test.stg");
	LPSTORAGE pIStorage=NULL;
	HRESULT rez;
	rez=StgOpenStorage(filename,NULL, STGM_READWRITE | 
		STGM_SHARE_EXCLUSIVE ,NULL,0,&pIStorage);

	if (!FAILED(rez))
	{
		cout << "Ok open" << endl;
		LPSTREAM stream =  NULL;
		HRESULT hresult = pIStorage->CreateStream(L"MyFile",STGM_READWRITE|
			STGM_SHARE_EXCLUSIVE|STGM_CREATE,0, 0, &stream);
		stream->Release();  
		pIStorage->Release(); 
	}
	else
		cout << "Error open" << endl;

	return 0;
}

Если теперь просмотреть наше хранилище в DocFile View, то том можно увидеть наш файл.

70_1.gif (1593 b)

Обратите внимание на то, что в свойствах открываемого хранилища использован флаг STGM_READWRITE. Точно так же без проблем записывается файл и в Excel.

70_2.gif (2196 b)

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


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.