Это, опять же, не пост, а пара быстрых заметок на полях.
* Описание функции VirtualFree значительно разнится в онлайновом MSDN и в моей локальной версии, которая October 2000. В онлайне -- правильно: флаги (флаги?) MEM_RELEASE и MEM_DECOMMIT нельзя использовать совместно. Не попадитесь.
* То, что задаётся параметром dwStackSize функции CreateThread -- это размер закоммиченной части стека. Резервируемый объём берётся из PE-заголовка текущего процесса и равен по умолчанию 1Мб. Не правя PE-заголовок, невозможно создать нить со стеком, который бы занимал меньше чем 1Мб в VM.
* Но начиная с Windows XP, как я только что узнал из онлайнового MSDN, добавлен флаг STACK_SIZE_PARAM_IS_A_RESERVATION, который в этой ситуации спасает.