Вот скопировал с исходника DirectIOAccess и все что нужно но! Что этот весь комплект делает и почему она не чего не делает? Пробывал в порты писать а не хочет Код (Text): BOOL AddAccountRight( PCWSTR pwszPrivilegeName ) { PSID_AND_ATTRIBUTES psa = 0; LSA_HANDLE hPolicy; LSA_UNICODE_STRING usPrivilegeName; LSA_OBJECT_ATTRIBUTES oa; HANDLE hToken; ULONG cbNeeded; ULONG cch; BOOL bOK = FALSE; BOOL b; SCESTATUS status; ZeroMemory( &oa, sizeof(oa) ); cch = wcslen( pwszPrivilegeName ); if ( 0 != cch ) { usPrivilegeName.Length = (USHORT) cch*sizeof(WCHAR); usPrivilegeName.MaximumLength = (USHORT) (cch*sizeof(WCHAR) + sizeof(UNICODE_NULL)); usPrivilegeName.Buffer = (PWSTR) pwszPrivilegeName; status = LsaOpenPolicy( NULL, &oa, POLICY_CREATE_ACCOUNT | POLICY_LOOKUP_NAMES, &hPolicy ); if ( SCESTATUS_SUCCESS == status ) { b = OpenProcessToken( GetCurrentProcess(), TOKEN_QUERY, &hToken ); if ( b ) { cbNeeded = 0; GetTokenInformation( hToken, TokenUser, psa, 0, &cbNeeded ); if ( 0 != cbNeeded ) { psa = (PSID_AND_ATTRIBUTES) malloc( cbNeeded ); if ( NULL != psa ) { b = GetTokenInformation( hToken, TokenUser, psa, cbNeeded, &cbNeeded); if ( SCESTATUS_SUCCESS == LsaAddAccountRights( hPolicy, psa->Sid, &usPrivilegeName, 1) ) { bOK = TRUE; } free( psa ); } } CloseHandle( hToken ); } LsaClose( hPolicy ); } } return bOK; }
Это функция разрешает укзанную привелегию для пользователя от имени которого запущен процесс. Чтобы все работала нужно разлогиниться и снова залогиниться ( или перезагрузить машину ) - только тогда вступит в силу новая политика. Для доступа к портам видимо, нужна была превелегия "SeTcbPrivilege" AKA "Act as operating system part". По умолчанию, она отключена для всех пользователей, в том числе и группы Администраторов. И вообщето ее включение - это понижение безопасности системы. Я бы посоветовал код, осуществляющий доступ к портам оформить в серсис и запустить его как LOCAL SYSTEM. IMHO тогда эта ф. вообще не понадобится