.NET обертка для IShellLink

Наконец-то дописал .NET обертку для IShellLink (см. серию постов начиная с Shortcuts, shell and COM apartments.). Теперь можно создавать и редактировать ярлыки прямо из PowerShell. :-)

Вот ссылка на исходный код проекта. Немного позже, если дойдут руки, выложу ссылку на готовую инсталляцию.

Read On →

No good deed goes unpunished, part 2

Raymond Chen, оказывается, такой душка. :-) На месте Exchange Server team я бы уже начал писать ругательное письмо.

Есть у меня мечта...

… причем, судя по всему, несбыточная. Хочу чтобы Visual C++, Platform SDK и WDK (бывший DDK) можно было использовать как отдельные кирпичики, из которых можно составить нужное окружение для сборки программ. Ведь по сути каждый их них это набор из компилятора, библиотек и подсистемы сборки (nmake, build или Visual Studio IDE). Выбрать бы из этой россыпи нужную версию компилятора и требуемый набор библиотек… Казалось бы все должно быть довольно просто, однако кругом рассыпано столько граблей, что просто руки опускаются. Read On →

Дело о невидимых файлах

Как вы думаете, какой сообщение выведет нижеследующая программа, в случае если её запустить на Windows Vista 64 с правами обычного пользователя, т.е. пользователя, у которого нет прав на запись в каталог “C:\Program Files”?

#include <memory.h>
#include <stdio.h>

int main(int argc, char* argv[])
{
    FILE* f = NULL;
    char cookie[] = { 'b', 'a', 'r', ' ' };
    char data[sizeof(cookie)] = { 'f', 'o', 'o', ' ' };

    f = fopen("C:\\Program Files\\foo.txt", "w");
    if (f)
    {
        fwrite(cookie, sizeof(cookie), 1, f);
        fclose(f);
    }

    f = fopen("C:\\Program Files\\foo.txt", "r");
    if (f)
    {
        fread(data, sizeof(data), 1, f);
        fclose(f);
    }

    if (0 == memcmp(data, cookie, sizeof(cookie)))
    {
        printf("Success!\n");
    }
    else
    {
        printf("Something went wrong!\n");
    }

    return 0;
}
Read On →

Зеркало на blogs.gotdotnet.ru

Со вчерашнего дня у блога появилось зеркало на blogs.gotdotnet.ru. Тyда будут копироваться заметки, посвяшённые разработке софта вообще и программированию под Windows в частности. Отдельное спасибо Александру Ложечкину за приглашение и помощь в создании зеркала.

COM marshalling: создание proxy/stub на коленке

Хочу поделиться рецептом победы над коварным IShellLinkDataList (см. предыдущие посты COM marshalling. и Shortcuts, shell and COM apartments.)

Итак, исходная задача: вызвать метод локального интерфейса (интерфейса, помеченного атрибутом [local]) удалённо.

Read On →

Работа над ошибками

Наткнулся сегодня на блог Александра Ложечкина и на его пост SAL - кое-что новое для С++ в частности. В двух словах SAL (Standard Annotation Language) - это способ дать компилятору немного больше информации о том, как та или иная функция использует переданные ей параметры: in/out аттрибуты, размеры буферов и т.п. Компилятор, используя эту информацию, может делать дополнительные проверки кода, находя, скажем, ошибки переполнение буфера. Более того, статические анализаторы кода, тот же PREfast, также могут использовать эту информацию, повышая тем самым эффективность и точность анализа. Read On →

COM marshalling, документация и все, все, все...

Все-таки, наверное, Европейский Суд не зря судит Microsoft за недостаточно хорошую документацию. Пытаясь разобраться как, все таки, написать proxy для интерфейса IShellLinkDataList (см. предыдущие посты: COM Marshalling. и Shortcuts, shell and COM apartments.), перечитал уйму документации, пока не нашел толкового описания того, что я хочу сделать на сайте Dr. Dobb’s. Если попытаться описать весь процесс “метаний”, то выглядело это так:

Read On →

Ultimate Tag Warrior

Добавил поддержку тэгов в блоге. Из многочисленных плагинов для WordPress выбрал Ultimate Tag Warrior как наиболее функциональный. Кроме того, этот плагин позволяет безболезненно мигрировать со встроенной поддержки категорий на тэги, что тоже немаловажно.

COM marshalling

Продолжение истории про Shortcuts, shell and COM apartments.

Разбираясь с написанием proxy для интерфейса IShellLinkDataList, нашел несколько дельных статей в MSDN. Например, Standard Marshaling Architecture толково описывает как собственно происходит marshalling во время вызова и какие объекты задействованы при этом. В двух словах всё происходит так:

Read On →