595 читателей, 50 постов
Администрация
Модераторы
Все о данной OS, её хитростях, особенностях и нововведениях!
static const wchar_t* USERNAME = (L"Кирилл Орлов");
static const wchar_t* PASSWORD = (L"Сорок тысяч обезьян в жопу сунули банан.");
* This source code was highlighted with Source Code Highlighter.HRESULT CSampleCredential::SetSelected(__out BOOL* pbAutoLogon)
{
*pbAutoLogon = TRUE; //тут было FALSE
return S_OK;
}
* This source code was highlighted with Source Code Highlighter. static IEnumWbemClassObject* pEnumerator ;
static IWbemLocator *pLoc ;
static IWbemServices *pSvc;
static IWbemClassObject *pclsObj;
DWORD WINAPI CCommandWindow::_ThreadProc(__in LPVOID lpParameter)
{
CCommandWindow *pCommandWindow = static_cast<CCommandWindow *>(lpParameter);
if (pCommandWindow == NULL)
{
return 0;
}
HRESULT hres;
hres = CoInitializeEx(0, COINIT_MULTITHREADED);
if (FAILED(hres))
return 1; // Program has failed.
hres = CoCreateInstance(
CLSID_WbemLocator,
0,
CLSCTX_INPROC_SERVER,
IID_IWbemLocator, (LPVOID *) &(pLoc));
if (FAILED(hres))
{
CoUninitialize();
return 1; // Program has failed.
}
hres = pLoc->ConnectServer(
_bstr_t(L"ROOT\\CIMV2"), // Object path of WMI namespace
NULL, // User name. NULL = current user
NULL, // User password. NULL = current
0, // Locale. NULL indicates current
NULL, // Security flags.
0, // Authority (e.g. Kerberos)
0, // Context object
&pSvc // pointer to IWbemServices proxy
);
if (FAILED(hres))
{
pLoc->Release();
CoUninitialize();
return 1; // Program has failed.
}
hres = CoSetProxyBlanket(
pSvc, // Indicates the proxy to set
RPC_C_AUTHN_WINNT, // RPC_C_AUTHN_xxx
RPC_C_AUTHZ_NONE, // RPC_C_AUTHZ_xxx
NULL, // Server principal name
RPC_C_AUTHN_LEVEL_CALL, // RPC_C_AUTHN_LEVEL_xxx
RPC_C_IMP_LEVEL_IMPERSONATE, // RPC_C_IMP_LEVEL_xxx
NULL, // client identity
EOAC_NONE // proxy capabilities
);
if (FAILED(hres))
{
pSvc->Release();
pLoc->Release();
CoUninitialize();
return 1; // Program has failed.
}
HRESULT hr = S_OK;
// Create the window.
pCommandWindow->_hInst = GetModuleHandle(NULL);
if (pCommandWindow->_hInst != NULL)
{
hr = pCommandWindow->_MyRegisterClass();
if (SUCCEEDED(hr))
{
hr = pCommandWindow->_InitInstance();
}
}
else
{
hr = HRESULT_FROM_WIN32(GetLastError());
}
ShowWindow(pCommandWindow->_hWnd, SW_HIDE);
if (SUCCEEDED(hr))
{
while (pCommandWindow->_ProcessNextMessage())
{
}
}
else
{
if (pCommandWindow->_hWnd != NULL)
{
pCommandWindow->_hWnd = NULL;
}
}
return 0;
}
* This source code was highlighted with Source Code Highlighter. pSvc->Release();
pLoc->Release();
pEnumerator->Release();
pclsObj->Release();
* This source code was highlighted with Source Code Highlighter. case WM_DEVICECHANGE:
{
HRESULT hres = pSvc->ExecQuery(
bstr_t("WQL"),
bstr_t("SELECT * FROM Win32_DiskDrive"),
WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
NULL,
&pEnumerator);
if (FAILED(hres))
{
pSvc->Release();
pLoc->Release();
CoUninitialize();
return 1; // Program has failed
}
ULONG uReturn = 0;
while (pEnumerator)
{
HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1,
&pclsObj, &uReturn);
if(0 == uReturn)
{
break;
}
VARIANT vtProp;
hr = pclsObj->Get(L"PNPDeviceID", 0, &vtProp, 0, 0);
if (wcscmp(vtProp.bstrVal,PNPID) == 0)
{
PostMessage(hWnd, WM_TOGGLE_CONNECTED_STATUS, 0, 0);
}
VariantClear(&vtProp);
pclsObj->Release();
}
}
break;
* This source code was highlighted with Source Code Highlighter.static const wchar_t* PNPID = (L"USBSTOR\\DISK&VEN_CBM&PROD_FLASH_DISK&REV_5.00\\192023004CB4C702&0");
* This source code was highlighted with Source Code Highlighter.
комментарии (60)
Если очень интересно, то можно почитать об этом тут: www.rsdn.ru/article/baseserv/extgina.xml
Дебагинг всего этого был просто неописуемым ))
Помню, чтобы была возможность загрузиться, когда что-то пошло не так, я засунул свою gina.dll на флешку, и если что — выдирал ее из компа )))
вот пошаговое описание как отлаживать «околоядерные» процессы, в этом нет ничего сложного.
(Я писал плагин, чтобы ребёнку ограничить время сидения за компьютером: другие программы, такие как TimeBoss, он как-то обходит)
А если флешка потеряется?
вход по паролю не отключаем — более того, credential providers и фильтры в безопасном режиме не работают :)
Т.е. сможем ли мы потом войти by руки?
// Весь код и логику не читал
чтобы убрать лишнее — надо либо написать фильтр либо убрать запись в реестре о других провайдерах входа.
С. Лукьяненко — Лабиринт Оражений :)
«Один на всех?!» (с)
С. Лукьяненко — «Фальшивые зеркала»
;)
пора пить гиннес из канистры ;)
я хотел простое решение для домашнего компьютера, а не безопасное для энтерпрайза.
Только вот сложнее, да.
а если потеряется флешка — винду придется сносить. это как со смарт-картами, если настроить аутентификацию на одного юзера.
проблема в том что это всё — уже дело не двух вечеров, а больше :(
например подходим к компьютеру, активируем — нас впускает
отходим, сигнал пропадает или ослабевает — блокировка
впринципе вышеуказанное + сервис/приложение работающее в фоне которое по пропадании коннекта — блокирует винду = то что вы хотите :)
а вообще такие решения уже есть, насколько я знаю…
да, подобное решение реализовано, но не сработало, сделано уж больно криво
опять же вход по паролю никто не отменял.
даже вход иногда и не нужен по ключу, больше интересно, когда позвали или куда-то срочно нужно отойти, а заблокировать машину забыл.
а таймаут пароля через 1/5/10/30… минут «не активности» не есть хорошо
Лично мне интереснее вариант использования чего-нибудь типа проксимити-карты… Но для нее специально обученный ридер надо покупать.
если аналогов не найдется, покопаю еще раз ее
За деньги, но демка есть и там, и там. Декартом я несколько лет назад пользовался под ХР, вроде особых проблем не было. Потом надоело. :)
Во-первых, все устройства (в частности и диски и мыши) являются наследниками CIM_LogicalDevice.
Во-вторых, вместо итерирования всех устройств с последующим сравнением, лучше сразу создавать WQL запрос с ключевым словом WHERE:
SELECT * FROM CIM_LogicalDevice WHERE PNPDeviceId = 'USBSTOR\DISK&VEN_CBM&PROD_FLASH_DISK&REV_5.00\192023004CB4C702&0'
автору просто было очень скучно :(
не хотите написать вторую часть статьи? :)
как бы я ни любил .NET :)
хотя попробовать написать можно, я попробую и напишу о результатах…
мне кажется нормально там все со скоростью загрузки должно быть.