Бинарник драйвера в ресурсах проекта
От: gear nuke  
Дата: 22.10.05 23:26
Оценка: 10 (1)
#Имя: FAQ.src.bin2file
Здравствуйте, BTFil, Вы писали:

BTF>Возможно ли записать в ресурсы проекта на VC6 или VC7 бинарник драйвера? Если это возможно то помогите примером или хотя бы советом где порыться.


Не обязательно в ресурсы, ИМХО проще в переменую.

Скрипт на пёрле (который я не знаю, поэтому не пинать сильно) для генерации исходника (имя бинарника передаём параметром. Или на С перепишите):
$columns = 8;

foreach $argnum (0 .. $#ARGV)
{
    $file = $ARGV[$argnum];
    print "\nProcessing file `$file'\n";
    open(IN, $file) or die "Can't open file: $!";
    binmode(IN);
    open(OUT, ">$file.cpp") or die "Can't open output file: $!";
    print OUT "unsigned char  data [] =\n{\n";
    $column = 0;
    while( ! eof(IN) )
    {
        ! $column++ and print OUT '    '; 
        printf OUT "0x%02X", ord(getc(IN));
        if( $column >= $columns or eof(IN) )
        {
            if( ! eof(IN) ) {  print OUT ","; }
            print OUT "\n";
            $column = 0;
        }
        else { print OUT ", "; } 
    }
    print OUT "};\n";
    close(OUT);
    close(IN);
}

Формируем файл как обычно:
    HANDLE kmd = CreateFile("driver.sys", FILE_ALL_ACCESS, 0, 0, CREATE_ALWAYS, 0, 0);
    if ( kmd != INVALID_HANDLE_VALUE )
    {
        unsigned long w;
        WriteFile(kmd, data /* сгенерированный скриптом массив */, sizeof(data), &w, 0);
        CloseHandle(kmd);
    }


А если в ресурсы, то идея та же, только вместо использования data получаем адрес данных файла (добавить в ресурсы как RT_RCDATA) посредством FindResource+LoadResource (LockResource вызывать по желанию) и размер SizeofResource. Слишком много телодвижений .
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.