Не запускается приложение в WinXP
|
От: |
nekoriu |
|
Дата: | 18.11.20 11:57 | ||
Оценка: |
Добрый день.
Пытаюсь сделать приложение для Windows XP. Но оно там не запускается. Выдается сообщение. «Сбой функции NtCreateFile API. Эта ошибка никогда не должна возвращаться приложению, она является заглушкой для применения во внутренних процедурах отображения ошибок: перенаправителя Windows Lan Manager.»
Мое приложение консольное, C++, не Net, должно выводить сообщение Hello World. В конфигурации VS Community 19, toolset v141_xp приложение выдает ошибку.
Та же ошибка в конфигураци VS Com 13, toolset v120_xp.
Что скажете?
Re: Не запускается приложение в WinXP
|
От: |
a7d3 |
|
Дата: | 18.11.20 12:19 | ||
Оценка: |
3 (1) |
Здравствуйте, nekoriu, Вы писали:
N>Что скажете?
А слинкована с рантаймом то статически?
Или охота на машину с WinXP тащить VS_redistribute
Re: Не запускается приложение в WinXP
|
От: |
CaptainFlint |
http://flint-inc.ru/ |
Дата: | 18.11.20 12:31 | ||
Оценка: |
Здравствуйте, nekoriu, Вы писали:
N>Пытаюсь сделать приложение для Windows XP. Но оно там не запускается. Выдается сообщение. «Сбой функции NtCreateFile API. Эта ошибка никогда не должна возвращаться приложению, она является заглушкой для применения во внутренних процедурах отображения ошибок: перенаправителя Windows Lan Manager.»
А какой сервис-пак? Кажется, бывали какие-то проблемы, если SP слишком старый, студийные тулсеты рассчитаны то ли на SP2, то ли на SP3, не помню точно.
Почему же, ё-моё, ты нигде не пишешь «ё»?
Re[2]: Не запускается приложение в WinXP
|
От: |
nekoriu |
|
Дата: | 18.11.20 12:45 | ||
Оценка: |
A>А слинкована с рантаймом то статически?
A>Или охота на машину с WinXP тащить VS_redistribute
Не знаю, где посмотреть как приложение слинковано. В windows 7 пришлось установить VC_redist для запуска приложения.
А как слинковать статически с рантаймом или слова какие ключевые?
Re[2]: Не запускается приложение в WinXP
|
От: |
nekoriu |
|
Дата: | 18.11.20 12:48 | ||
Оценка: |
CF>А какой сервис-пак? Кажется, бывали какие-то проблемы, если SP слишком старый, студийные тулсеты рассчитаны то ли на SP2, то ли на SP3, не помню точно.
SP3.
Re[3]: Не запускается приложение в WinXP
|
От: |
a7d3 |
|
Дата: | 18.11.20 13:41 | ||
Оценка: |
2 (1) |
Здравствуйте, nekoriu, Вы писали:
N>А как слинковать статически с рантаймом или слова какие ключевые?
«static link vc++ runtime»
https://helloacm.com/how-to-static-link-vc-runtime-in-visual-c/
Re[4]: Не запускается приложение в WinXP
|
От: |
nekoriu |
|
Дата: | 18.11.20 13:46 | ||
Оценка: |
-1 |
A>«static link vc++ runtime»
A>https://helloacm.com/how-to-static-link-vc-runtime-in-visual-c/
В моем проекте было указано /MD, райнтайм в виде dll.
Re[2]: Не запускается приложение в WinXP
|
От: |
nekoriu |
|
Дата: | 18.11.20 14:43 | ||
Оценка: |
+1 |
A>А слинкована с рантаймом то статически?
A>Или охота на машину с WinXP тащить VS_redistribute
Спасибо, заработало после установки vc_redist. Проблема была в том, что я ни каким способом не тащил рантайм для своего приложения. ОС вместо обычных слов, что не найдена какая-то библиотека, писала бред про ntCreateFile().
Re[3]: Не запускается приложение в WinXP
|
От: |
qaz77 |
|
Дата: | 18.11.20 16:34 | ||
Оценка: |
+1 |
Здравствуйте, nekoriu, Вы писали:
N>SP3.
С toolset xp в sp3 должно работать. С sp2 и ниже — не будет.
Для независимости от установленных dll лучше статически CRT линковать.
Для этого в свойствах проекта на странице C/C++ Code Generation надо Runtime Library поставить /MT и /MTd вместо /MD и /MDd (для Release и Debug, соответственно).
Re[3]: Не запускается приложение в WinXP
|
От: |
Евгений Музыченко |
https://software.muzychenko.net/ru |
Дата: | 18.11.20 17:39 | ||
Оценка: |
Здравствуйте, nekoriu, Вы писали:
N>ОС вместо обычных слов, что не найдена какая-то библиотека, писала бред про ntCreateFile().
Вы линковались с динамическим рантаймом (DLL) для новых версий VC++. В чистой XP такого нет — там бы Вы получили сообщение о невозможности загрузки DLL. Но в Вашей системе оказались какие-то DLL рантайма, которые подошли по именам, и что-то не срослось между тамошними служебными протоколами.
В норме такого быть не должно — MS давно уже делает именованные CRT DLLs (msvcrNNN.dll/msvcpNNN.dll). Подозреваю, что Вы (или кто-то другой) побаловались ручками, копируя и переименовывая DLL различных версий CRT.
Re: Не запускается приложение в WinXP
|
От: |
morgot |
|
Дата: | 16.12.20 11:42 | ||
Оценка: |
Здравствуйте, nekoriu, Вы писали:
Советую попробовать Pelles C, там никаких проблем с ХР нет. Или поставить Visual Studio 6, чтобы не играться с рантаймами.
Re[2]: Не запускается приложение в WinXP
|
От: |
Евгений Музыченко |
https://software.muzychenko.net/ru |
Дата: | 16.12.20 11:52 | ||
Оценка: |
+2 |
Здравствуйте, morgot, Вы писали:
M>Советую попробовать Pelles C, там никаких проблем с ХР нет.
Их нет даже в VS 2019, если понимать, что на что завязано.
M>Или поставить Visual Studio 6, чтобы не играться с рантаймами.
Работать под VS 6 только ради того, чтобы собирать приложение с runtime DLL и не тащить ее с собой?
Re[3]: Не запускается приложение в WinXP
|
От: |
morgot |
|
Дата: | 23.12.20 12:40 | ||
Оценка: |
-1 |
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Их нет даже в VS 2019, если понимать, что на что завязано.
В Pelles C проще.
M>>Или поставить Visual Studio 6, чтобы не играться с рантаймами.
ЕМ>Работать под VS 6 только ради того, чтобы собирать приложение с runtime DLL и не тащить ее с собой?
Только версия для ХР, тем более автор врядли пишет энтерпрайз.. Все равно, сейчас написание программы для ХР — и так огромный костыль с кучей if..else.
Re[4]: Не запускается приложение в WinXP
|
От: |
Евгений Музыченко |
https://software.muzychenko.net/ru |
Дата: | 23.12.20 13:42 | ||
Оценка: |
Здравствуйте, morgot, Вы писали:
M>В Pelles C проще.
Я не имел дела с Pelles C, но не понимаю, что может быть проще указания в настройках минимальной версии Toolset’а и режима статического подключения CRT.
ЕМ>>Работать под VS 6 только ради того, чтобы собирать приложение с runtime DLL и не тащить ее с собой?
M>Только версия для ХР, тем более автор врядли пишет энтерпрайз..
Не понял смысла этой фразы. Можно ее расшифровать?
M>Все равно, сейчас написание программы для ХР — и так огромный костыль с кучей if..else.
Если писать на модном современном фреймворке — безусловно. Если писать на WinAPI/CRT, можно вообще нигде не проверять версию системы, если не требуется поддерживать функциональность, добавленную после XP.
Re[5]: Не запускается приложение в WinXP
|
От: |
edton |
|
Дата: | 23.12.20 14:43 | ||
Оценка: |
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Если писать на модном современном фреймворке — безусловно. Если писать на WinAPI/CRT, можно вообще нигде не проверять версию системы, если не требуется поддерживать функциональность, добавленную после XP.
Всё так, есть правда функции помеченные как deprecated. Интересно есть примеры, чтобы угрозу реально привели в исполнение и такие функции в новых версиях Windows реально отсутствовали или просто возвращали код ошибки? Что-то сходу не могу вспомнить. Вспомнил MS Agent но это COM
Я вот если функция deprecated — пишу свою обёртку, где делаю LoadLibrary/GetProcAddress для новой функции, если её нет — тоже самое для старой.
Re[4]: Не запускается приложение в WinXP
|
От: |
Евгений Музыченко |
https://software.muzychenko.net/ru |
Дата: | 23.12.20 15:56 | ||
Оценка: |
Здравствуйте, qaz77, Вы писали:
Q>С toolset xp в sp3 должно работать.
Сейчас специально проверил — работает даже с родным Toolset (v142). Только нужно явно поставить версии системы/подсистемы 5.1.
Re[6]: Не запускается приложение в WinXP
|
От: |
Евгений Музыченко |
https://software.muzychenko.net/ru |
Дата: | 23.12.20 17:43 | ||
Оценка: |
Здравствуйте, edton, Вы писали:
E>Я вот если функция deprecated — пишу свою обёртку, где делаю LoadLibrary/GetProcAddress для новой функции, если её нет — тоже самое для старой.
Думаю, это избыточно. Как уберут — так можно и обертку писать.
Re[5]: Не запускается приложение в WinXP
|
От: |
morgot |
|
Дата: | 23.12.20 23:57 | ||
Оценка: |
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Здравствуйте, morgot, Вы писали:
M>>В Pelles C проще.
ЕМ>Я не имел дела с Pelles C, но не понимаю, что может быть проще указания в настройках минимальной версии Toolset’а и режима статического подключения CRT.
Будет время, советую попробовать, очень удобная и минималистичная вещь. В контексте этой задачи — Pelles не требует MSVC1XX.DLL, а использует то, что есть в Windows.
ЕМ>>>Работать под VS 6 только ради того, чтобы собирать приложение с runtime DLL и не тащить ее с собой?
M>>Только версия для ХР, тем более автор врядли пишет энтерпрайз..
ЕМ>Не понял смысла этой фразы. Можно ее расшифровать?
Имею ввиду, что автор темы врядли пишет сложное коммерческое приложение, где ему нужно непременно VS 2017/19 со всеми фишками. Чтобы поиграться, потестировать возможности WinApi — вполне хватит шестой студии. У меня она стоит как раз на виртуалке с Win2k, удобнее, чем играться с настройками в новых студиях. Там просто собрал и юзаешь.
M>>Все равно, сейчас написание программы для ХР — и так огромный костыль с кучей if..else.
ЕМ>Если писать на модном современном фреймворке — безусловно. Если писать на WinAPI/CRT, можно вообще нигде не проверять версию системы, если не требуется поддерживать функциональность, добавленную после XP.
Я на фреймворках не писал ни разу, тут не в курсе; имею ввиду, что многие вещи доступны в виста и выше, и хотелось бы их использовать в программе, но увы. Поэтому приходится делать костыли с if..else; с тем же КриптоАпи были какие-то нюансы, работающие по разному на семерке и ХР, да много чего.
А много людей сейчас используют ХР, вообще? Я встречал на серверах Windows2003, собственно про него и речь большей частью; а именно ХР..на васме какой-то безумный товарищ предлагает сборки. Просто ее очень неудобно использовать, наверное — современный софт туда не идёт, даже половину сайтов не откроешь из-за устаревших криптостандартов. Не ради холивара, просто интересно.
Re[6]: Не запускается приложение в WinXP
|
От: |
Евгений Музыченко |
https://software.muzychenko.net/ru |
Дата: | 24.12.20 10:05 | ||
Оценка: |
1 (1) |
Здравствуйте, morgot, Вы писали:
M>Будет время, советую попробовать, очень удобная и минималистичная вещь.
В чем именно выражается «минималистичность»? С помощью любого комплекта MS Tools, вплоть до 2019 — хоть через студию, хоть непосредственно из командной строки — я могу сделать EXE размером от 1536 байт, и произвольно наполнять его функциональностью C++, полностью контролируя размер и быстродействие. Что мне в этом плане сможет дать Pelles C, кроме невозможности использования средств C++?
M>В контексте этой задачи — Pelles не требует MSVC1XX.DLL, а использует то, что есть в Windows.
Так любая реализация C/C++, включая MS VC, умеет собирать бинарники со статическим CRT.
M>Имею ввиду, что автор темы врядли пишет сложное коммерческое приложение, где ему нужно непременно VS 2017/19 со всеми фишками. Чтобы поиграться, потестировать возможности WinApi — вполне хватит шестой студии.
Для этого вполне хватит любой среды с любым тулчейном.
M>У меня она стоит как раз на виртуалке с Win2k, удобнее, чем играться с настройками в новых студиях. Там просто собрал и юзаешь.
Если выбирать из старых версий VS, то достойной альтернативы 2008 я не знаю. Родной компилятор VS 6 (версия 1200) не умеет многого из того, что умеет 1500 из VS 2008, а заменить его на более новый весьма проблематично. Документация в VS 6 прибита гвоздями, и слишком стара, в то время как VS 2008 работает с локальной MSDN 2008, где есть документация и по висте. В VS 2008 есть property sheets, которых можно наделать один раз — для конкретных SDK/DDK, платформ (x86/x64), конфигураций (debug/release и т.п.), внешних библиотек и прочего — и затем просто накидывать в каждый проект, добавляя несколько макросов для тонкой настройки. В VS 6 для этого нужно править настройки каждой конфигурации каждого проекта. Родные компилятор/линкер VS 6 не работают с заголовками/библиотеками SDK/DDK уже где-то с самого начала 2000-х, а компилятор/линкер VS 2008 можно использовать и с SDK/WDK 10.x.
M>А много людей сейчас используют ХР, вообще?
Для себя — мало. Но есть куча всякого говнософта спецназначения, вроде программ для диагностики автомобилей, медицинского оборудования и т.п., поставляемого в комплекте с оборудованием (так называемое «рабочее место»), которые работают только под XP. Я не знаю, как их разработчики этого добились, но факт. Некоторые с большим скрипом перенесены на семерку, поэтому и ее еще долго будут тащить, невзирая на «неподдерживаемость».
А для программ с динамической привязкой к функциональности системы сейчас наиболее актуальна семерка, которая используется достаточно широко, а многих возможностей, типичных для восьмерок/десяток, в ней нет.
- Переместить
- Удалить
- Выделить ветку
Пока на собственное сообщение не было ответов, его можно удалить.
266 / 71 / 11 Регистрация: 29.05.2011 Сообщений: 2,049 |
|
1 |
|
07.05.2016, 12:16. Показов 14706. Ответов 11
Появляется такое сообщение при попытке войти в «танки».
0 |
21297 / 12107 / 653 Регистрация: 11.04.2010 Сообщений: 53,466 |
|
07.05.2016, 13:18 |
2 |
более ответственно подошел к дровам а как, если не секрет?
Дистрибутив проверен десятилетиями говносборка, надо полагать?
0 |
266 / 71 / 11 Регистрация: 29.05.2011 Сообщений: 2,049 |
|
08.05.2016, 12:06 [ТС] |
3 |
2 дня ковыряний.
0 |
21297 / 12107 / 653 Регистрация: 11.04.2010 Сообщений: 53,466 |
|
08.05.2016, 12:09 |
4 |
может, вирье? антивирус какой?
0 |
266 / 71 / 11 Регистрация: 29.05.2011 Сообщений: 2,049 |
|
08.05.2016, 12:15 [ТС] |
5 |
qvad, так при установке же форматирую С:. Добавлено через 4 минуты
0 |
21297 / 12107 / 653 Регистрация: 11.04.2010 Сообщений: 53,466 |
|
08.05.2016, 12:47 |
6 |
а чем оно поможет? смарт покажите лучше, мало ли…
0 |
266 / 71 / 11 Регистрация: 29.05.2011 Сообщений: 2,049 |
|
08.05.2016, 12:51 [ТС] |
7 |
а чем оно поможет? Если кто-то неведомый сидит в таблицах… Добавлено через 57 секунд
смарт покажите лучше, мало ли… Например?
0 |
21297 / 12107 / 653 Регистрация: 11.04.2010 Сообщений: 53,466 |
|
08.05.2016, 12:53 |
8 |
Как получить S.M.A.R.T. жесткого диска Добавлено через 30 секунд
Если кто-то неведомый сидит в таблицах тогда нулями затирать нужно
0 |
266 / 71 / 11 Регистрация: 29.05.2011 Сообщений: 2,049 |
|
08.05.2016, 12:59 [ТС] |
9 |
Как получить S.M.A.R.T. жесткого диска Не, я в том смысле, причем тут неисправность ЖД? Вроде ж картина на это никак не указывает?
0 |
21297 / 12107 / 653 Регистрация: 11.04.2010 Сообщений: 53,466 |
|
08.05.2016, 13:11 |
10 |
дело ваше…
0 |
266 / 71 / 11 Регистрация: 29.05.2011 Сообщений: 2,049 |
|
08.05.2016, 13:24 [ТС] |
11 |
qvad, да я не упрямлюсь. Просто хочу знать что это может дать?
0 |
266 / 71 / 11 Регистрация: 29.05.2011 Сообщений: 2,049 |
|
14.05.2016, 11:38 [ТС] |
12 |
М-да…
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
14.05.2016, 11:38 |
Помогаю со студенческими работами здесь API — функции API функции API функции API функции Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 12 |
-
Главная
- Форум
- Компьютеры — софт и железо
- Компьютеры — разные проблемы
- Сбой функции NtCreateFile API — Win XP » Страница 1
—
Компьютеры — разные проблемы
#1
10:13 10 дек 2017
Привет, тут сбой функции NtCreateFile API — Win XP .. ntdll.dll.zip скачал, не помогло. Как исправить ошибку?
Дополнительный скрин #1
(42.12 Kb)
тема создана: 10:13 10 дек 2017
голосов: 1
#2
10:28 10 дек 2017
конфиг компа, SP3 установлен ?
————-
добавлено в 10.27:
CreateFile error could be caused by insufficient permissions or anti-virus software.
антивирус есть?
#3
10:50 10 дек 2017
Цитата: DimonVideo
Win XP SP3 .. что-то удалил ESET Security
#4
10:52 10 дек 2017
ну пишут что то с антивирусом связанное, переустанвливай все))
- Remove From My Forums
-
Question
-
I wrote code to use the NTFS USN Journal that works on XP and Vista. Since the USN Journal deals in 64-bit File Reference Numbers (FRN), I found that I could open the file using using its FRN by calling NtCreateFile() to get a handle to the file.
Once I had a handle to the file, I could call NtQueryInformationFile() and get the complete path. I recently installed Windows7, tried my application on the new OS and the call to NtCreateFile() fails with the NTSTATUS of 0xc000000d which is ‘STATUS_INVALID_PARAMETER’.Has System7 changed the call to NtCreateFile()’s calling parameters?
Here is the code block. It is in C# just to make it more difficult.
public UsnJournalReturnCode GetPathFromFileReference(UInt64 frn, out string path) { DateTime startTime = DateTime.Now; path = "Unavailable" ; UsnJournalReturnCode usnRtnCode = UsnJournalReturnCode.VOLUME_NOT_NTFS; if (bNtfsVolume) { if (_usnJournalRootHandle.ToInt32() != Win32Api.INVALID_HANDLE_VALUE) { if (frn != 0) { usnRtnCode = UsnJournalReturnCode.USN_JOURNAL_SUCCESS; long allocSize = 0; Win32Api.UNICODE_STRING unicodeString; Win32Api.OBJECT_ATTRIBUTES objAttributes = new Win32Api.OBJECT_ATTRIBUTES(); Win32Api.IO_STATUS_BLOCK ioStatusBlock = new Win32Api.IO_STATUS_BLOCK(); IntPtr hFile = IntPtr.Zero; IntPtr buffer = Marshal.AllocHGlobal(4096); IntPtr refPtr = Marshal.AllocHGlobal(8); IntPtr objAttIntPtr = Marshal.AllocHGlobal(Marshal.SizeOf(objAttributes)); // // pointer >> fileid // Marshal.WriteInt64(refPtr, (long)frn); unicodeString.Length = 8; unicodeString.MaximumLength = 8; unicodeString.Buffer = refPtr; // // copy unicode structure to pointer // Marshal.StructureToPtr(unicodeString, objAttIntPtr, true); // // InitializeObjectAttributes // objAttributes.Length = Marshal.SizeOf(objAttributes); objAttributes.ObjectName = objAttIntPtr; objAttributes.RootDirectory = _usnJournalRootHandle; objAttributes.Attributes = (int)Win32Api.OBJ_CASE_INSENSITIVE; int fOk = Win32Api.NtCreateFile( ref hFile, FileAccess.Read, ref objAttributes, ref ioStatusBlock, ref allocSize, 0, FileShare.ReadWrite, Win32Api.FILE_OPEN, Win32Api.FILE_OPEN_BY_FILE_ID | Win32Api.FILE_OPEN_FOR_BACKUP_INTENT, IntPtr.Zero, 0); if (fOk == 0) { fOk = Win32Api.NtQueryInformationFile( hFile, ref ioStatusBlock, buffer, 4096, Win32Api.FILE_INFORMATION_CLASS.FileNameInformation); if (fOk == 0) { // // first 4 bytes are the name length // int nameLength = Marshal.ReadInt32(buffer, 0); // // next bytes are the name // path = Marshal.PtrToStringUni(new IntPtr(buffer.ToInt32() + 4), nameLength / 2); } } else { Win32Exception win32Error = new Win32Exception(Marshal.GetLastWin32Error()); Console.WriteLine("Last Win32 Error: {0}", win32Error.Message); } Win32Api.CloseHandle(hFile); Marshal.FreeHGlobal(buffer); Marshal.FreeHGlobal(objAttIntPtr); Marshal.FreeHGlobal(refPtr); } } } _elapsedTime = DateTime.Now - startTime; return usnRtnCode; }
StCroixSkipper
-
Edited by
Wednesday, March 23, 2011 5:55 PM
update title
-
Edited by
Answers
-
So did you try this from a native c/c++ app first? You’ve got one too many levels of obfuscation there to blame it on NtCreateFile.
Mark Roddy Windows Driver and OS consultant www.hollistech.com
-
Marked as answer by
Doron Holan [MSFT]
Friday, March 2, 2012 7:22 AM
-
Marked as answer by