системная папка

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by kap00stik, 4 Oct 2012.

  1. kap00stik

    kap00stik New Member

    Joined:
    26 Jun 2010
    Messages:
    28
    Likes Received:
    0
    Reputations:
    0
    Попытки скопироваться в системную папку заканчиваются обломом. При отладке заметил что winapi функция
    GetSystemDirectory() возвращает C:\Windows\system32
    а папочка на самом деле System32, короче с большой буквы. Понятно конечно что можно подправить самому, или после не удачи поробовать скопироваться в папку с большой буквы. Но тем не менее, почему такая ерунда?
    Почему при папке System32 я получаю system32 ???
     
  2. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    Потому что пути в Windows не регистрозависимые
     
    _________________________
  3. kap00stik

    kap00stik New Member

    Joined:
    26 Jun 2010
    Messages:
    28
    Likes Received:
    0
    Reputations:
    0
    Я как бы понял и не понял.
    Мне в принципе до лампочки регистрозависимые они ли нет. Просто если winapi предоставляет мне для определения системной папки специальную функцию, я ее использую. И что я получаю при этом? Совершенно левый путь, пусть одна буковка, но тем не менее для программы это абсолютно другой, и тем самым левый путь.

    Как быть?
     
  4. Ins3t

    Ins3t Харьковчанин

    Joined:
    18 Jul 2009
    Messages:
    939
    Likes Received:
    429
    Reputations:
    139
    что ты несешь? тебе сказали же, что венде похрен на регистр символов. хочть system32, хоть SyStEm32. это не играет никакой роли.
     
  5. Jingo Bo

    Jingo Bo Member

    Joined:
    25 Oct 2009
    Messages:
    368
    Likes Received:
    51
    Reputations:
    7
    Может просто нет хватает для копирования в системную папку или косяк в коде где копируешь?
     
  6. kap00stik

    kap00stik New Member

    Joined:
    26 Jun 2010
    Messages:
    28
    Likes Received:
    0
    Reputations:
    0
    Оо, становится вообще интересно.
    Короче походу дело не в бобине :)

    Определяю системную папку. Копирую туда файл. CopyFile() возвращает 1, что есть nonzero = успех.
    Но найти этот свежескопированный файл я убей не могу.
    (даже среди скрытых и системных).
    Что за хрень?
    Прога запускается от админа. В правах походу дело не должно быть.
    Система windows 7 x64

    Копирую впринципе так:

    Code:
    char installPath[MAX_PATH];
    
    GetSystemDirectory(installPath, MAX_PATH);
    
    if( installPath[lstrlen(installPath)-1] != '\\' ) lstrcat(installPath, "\\");
    
    lstrcat(installPath, FILE_NAME);
    
    CopyFile(currentPath, installPath, false);
    
    
    Причем если все тоже самое проделываю с виндовской папкой то все отлично срастается. Только с системной папкой такая трабла.
     
    #6 kap00stik, 5 Oct 2012
    Last edited: 5 Oct 2012
  7. BigBear

    BigBear Escrow Service
    Staff Member Гарант - Escrow Service

    Joined:
    4 Dec 2008
    Messages:
    1,801
    Likes Received:
    920
    Reputations:
    862
    Есть подозрение, что ТС это делает на Windows 7. А там нужны специальные привелегии, чтобы иметь возможность копировать в System32. Юзерских прав малова-то будет.

    UPDATE Ну так я и думал, что семёрка...

    Code:
    CopyFile(currentPath, installPath, false);
    Мне одному показалось на этом месте, что ты копируешь директорию в директорию ?

    UPDATE 2

    Если проблема с системной папкой - прав программы на копирование файла недостаточно. (Это в случае отсутствия кривого кода копирования файла).
     
    _________________________
    #7 BigBear, 5 Oct 2012
    Last edited: 5 Oct 2012
  8. kap00stik

    kap00stik New Member

    Joined:
    26 Jun 2010
    Messages:
    28
    Likes Received:
    0
    Reputations:
    0
    Тебе показалось, файл копирует себя самого в системную папку. currentPath путь к себе самому включая имя файла, installPath путь к системной папке включая имя файла.
    Насчет прав сомневаюсь, как уже сказал, права админа.
    Привелегии может быть, если да хотелось бы знать какие.
    Хотя походу легче забить и копироваться в виндовскую папку.
     
  9. kap00stik

    kap00stik New Member

    Joined:
    26 Jun 2010
    Messages:
    28
    Likes Received:
    0
    Reputations:
    0
    Походу так оно и есть, иначе этого никак больше не объяснишь.
    Круто, одним движением волшебной палочки, все вири и трояны работавшие под ХР и устанавливавшие себа в сис.папку лихо пролетают под семеркой.

    Мистика правда в том, что при отладке вижу что функция CopyFile() возвращает 1 = успех.
     
    #9 kap00stik, 5 Oct 2012
    Last edited: 5 Oct 2012
  10. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    А ты посмотри в папке C:\Windows\SysWOW64 свой файлик, он там лежит.
     
    1 person likes this.
  11. kap00stik

    kap00stik New Member

    Joined:
    26 Jun 2010
    Messages:
    28
    Likes Received:
    0
    Reputations:
    0
    А вот и разгадка наконец то.
    У меня такая же хрень была с установкой значения ключа регистра. Ставил ставил на
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

    а он попадал в

    HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run

    Там помог твой совет с ключиком KEY_WOW64_64KEY для
    RegCreateKeyEx().

    А тут как быть?
     
  12. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    Wow64DisableWow64FsRedirection
     
    _________________________
  13. kap00stik

    kap00stik New Member

    Joined:
    26 Jun 2010
    Messages:
    28
    Likes Received:
    0
    Reputations:
    0
    То что надо. Спасибо.