Общее место в реестре

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by slesh, 18 Oct 2011.

  1. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Может кто нибудь сталкивался, с такой задачей: необходимо в реестр записывать и читать от туда данные, но так чтобы это можно было делать от любого пользователя.

    Если HKLM, то читать можно от любого, а записать тока от Админа.
    Если HKCU, то проблемы с чтением/записью от другова пользователя.

    Может кто нибудь знает как организовать это?
     
  2. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    450
    Reputations:
    288
    тебе надо с любыми правами писать\читать реестр?
     
  3. =Zeus=

    =Zeus= Member

    Joined:
    10 Aug 2009
    Messages:
    213
    Likes Received:
    54
    Reputations:
    5
    Возможно я ошибаюсь, если да то поправьте.
    Но ты хочешь писать в реестр ВСЕГДА. А как же права учетных записей? По моему это взаимоисключающие понятия.

    Апд: Только что в аське с другом поговорил - в принципе можно ведь менять СИД пользователя. Тогда в редакторе реестра отобразятся настройки другого. Но это в редакторе. А вот как это провернуть программно?
     
    #3 =Zeus=, 18 Oct 2011
    Last edited: 18 Oct 2011
  4. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    2 =Zeus= - менять SID не подойдет, потому что должно работать и из под Гостя.
    2 fd00ch - ну да, можно не реестр, можно файлы, но опять же глюки с правами доступа.

    т.е. можно закинуть всё в файл, но вот куда сам файл закинуть - хз. Главное учитывать что у пользователей могут быть права начиная от Гостя и заканчивая Системой
     
  5. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    2 Nightmarе нет, потому что файл может быть создан одним пользователем, а запускаться другим. Да и опять же. файл надо создавать в таком месте где все пользователи смогут иметь доступ
     
    #5 slesh, 18 Oct 2011
    Last edited: 18 Oct 2011
  6. =Zeus=

    =Zeus= Member

    Joined:
    10 Aug 2009
    Messages:
    213
    Likes Received:
    54
    Reputations:
    5
    Не совсем понятно, что именно нужно слешу. Просто сохранять настройки своей программы? Это малварь или прикладная программа?
     
    #6 =Zeus=, 18 Oct 2011
    Last edited: 18 Oct 2011
  7. Metal-Core

    Metal-Core Member

    Joined:
    20 Sep 2011
    Messages:
    182
    Likes Received:
    21
    Reputations:
    0
    %systemroot%\temp ?
     
  8. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    2 =Zeus= а что тут не понятно? Есть программа на компе, есть комп на котором работают пользователи разных привилегий (от админа до гостя) и каждый должен уметь читать настройки и иногда сохранять их. При этом для всех пользователей настройки должны быть одинаковые.
     
  9. shadowrun

    shadowrun Banned

    Joined:
    29 Aug 2010
    Messages:
    842
    Likes Received:
    170
    Reputations:
    84
    шаредокс
     
  10. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    2 Metal-Core в виндовый темп нельзя писать гостю (в XP и Win7) да и ктому же конфиги нах полетят при очистке темпа.
     
    #10 slesh, 18 Oct 2011
    Last edited: 18 Oct 2011
  11. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    2 shadowrun в шаредокс можно создать файлы любым пользователем, но править их уже сложно. т.е. если админ создаст файл, то гость не сможет исправить.

    Есть вариант поиграться с правами доступа программно, но это уже не то
     
  12. =Zeus=

    =Zeus= Member

    Joined:
    10 Aug 2009
    Messages:
    213
    Likes Received:
    54
    Reputations:
    5
    Win7 Guest Mode features

    1) Prevents system setting changes.
    2) Prevents the installation of applications and other software.
    3) Prevents the user from writing to the disk outside of their user profile.
    4) Data saved inside of the user profile is deleted when the user logs off.

    Как видно универсальности не получиться, гость слишком ограниченная учетка.
     
  13. shadowrun

    shadowrun Banned

    Joined:
    29 Aug 2010
    Messages:
    842
    Likes Received:
    170
    Reputations:
    84
    Для каждого пользователя по файлу :D . Ну или не давать проге создавать файл под учеткой админа. Создание файла должен быть из под Гостя, чтоб править могли все. Бредово и тупо, но других путей не вижу...
     
  14. =Zeus=

    =Zeus= Member

    Joined:
    10 Aug 2009
    Messages:
    213
    Likes Received:
    54
    Reputations:
    5
    А ничего что права будут рид-онли? Из МСДН:
     
  15. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    2 fd00ch
    CSIDL_COMMON_APPDATA ведет в \Documents and Settings\All Users\Application Data
    И там такие же проблемы как и в шаредок. Если админ создаст файл, то гость его не сможет править, если конечно при создании не зададутся принудительно права доступа к файлу, даующие всем доступ
     
  16. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Решил проблему следующим образом:
    1) Если надо читать файл, то открыть на чтение и считать данные.
    2) Если надо записать файл, то создать файл сразу с нужным DACL который даёт всем пользователям полные права.

    Кому интересно это делается, то вот пример:
    Code:
    #include <Windows.h>
    #include <AccCtrl.h>
    #include <Aclapi.h>
    
    
    PISECURITY_DESCRIPTOR InitSecDesc()
    {
    	PISECURITY_DESCRIPTOR  psd;
    	EXPLICIT_ACCESS_A      ea;
    	PACL                   pacl = NULL;
    	DWORD                  Status;
    
    	ea.grfAccessPermissions             = GENERIC_ALL;
    	ea.grfAccessMode                    = SET_ACCESS;
    	ea.grfInheritance                   = NO_INHERITANCE;
    	ea.Trustee.MultipleTrusteeOperation = NO_MULTIPLE_TRUSTEE;
    	ea.Trustee.pMultipleTrustee         = NULL;
    	ea.Trustee.TrusteeForm              = TRUSTEE_IS_NAME;
    	ea.Trustee.TrusteeType              = TRUSTEE_IS_UNKNOWN;
    	ea.Trustee.ptstrName                = "EVERYONE";
    
    	Status = SetEntriesInAclA(1, &ea, NULL, &pacl);
    	if (Status != ERROR_SUCCESS)
    	{
    		return NULL;
    	}
    
    	psd = (PISECURITY_DESCRIPTOR)LocalAlloc(LPTR, SECURITY_DESCRIPTOR_MIN_LENGTH); 
    	if (psd)
    	{
    		InitializeSecurityDescriptor(psd, SECURITY_DESCRIPTOR_REVISION);
    		Status = SetSecurityDescriptorDacl(psd, 1, pacl, 0);
    		if (!Status)
    		{
    			LocalFree(psd);
    			psd = NULL;
    		}
    	}
    
    	if (!psd) 
    	{
    		LocalFree(pacl);
    	}
    
    
    	return psd;
    }
    
    int main()
    {
    	PISECURITY_DESCRIPTOR psd;
    	SECURITY_ATTRIBUTES   sa;
    	HANDLE                h;
    
    	psd = InitSecDesc();
    	if (psd)
    	{
    		sa.nLength = sizeof (SECURITY_ATTRIBUTES);
    		sa.lpSecurityDescriptor = psd;
    		sa.bInheritHandle = FALSE;
    		
    		h = CreateFileA("c:\\22aa.txt",   GENERIC_WRITE, 0, &sa, CREATE_ALWAYS, 0, 0);
    		if (h != INVALID_HANDLE_VALUE)
    		{
    			MessageBoxA(0, "ok", "OK", 0);
    			CloseHandle(h);
    		}
    
    		LocalFree(psd->Dacl);
    		LocalFree(psd);
    	}
    	
        
    	return 0;
    }
    
     
    1 person likes this.