Что вызывает код ошибки 0x80070057 при вызове CFRegistersRoot?C#

Место общения программистов C#
Ответить
Anonymous
 Что вызывает код ошибки 0x80070057 при вызове CFRegistersRoot?

Сообщение Anonymous »

Я пытаюсь создать поставщика облачных синхронизации в C#, используя CSWIN32 для доступа к API CloudFilter. Однако всякий раз, когда я называю cfregistersyncprovider я получаю код ошибки 0x80070057 . Когда я передаю это на marshal.getExceptionForhr он возвращает System.argumentException: значение не попадает в ожидаемый диапазон. ниже мой код:

Код: Выделить всё

using Windows.Win32;
using Windows.Win32.Storage.CloudFilters;
using Windows.Win32.Foundation;
using System.Runtime.InteropServices;

namespace PStore;
internal class Install {
public static void Main() {
unsafe {
fixed (char* providerNameP = "PStore", providerVersionP = "1.1.1") {
CF_SYNC_REGISTRATION SyncReg = new() {
ProviderName = new PCWSTR(providerNameP),
ProviderVersion = new PCWSTR(providerVersionP)
};

CF_SYNC_POLICIES SyncPol = new() {
Hydration = new CF_HYDRATION_POLICY { Primary = CF_HYDRATION_POLICY_PRIMARY.CF_HYDRATION_POLICY_FULL, Modifier = CF_HYDRATION_POLICY_MODIFIER.CF_HYDRATION_POLICY_MODIFIER_AUTO_DEHYDRATION_ALLOWED },
Population = new CF_POPULATION_POLICY { Primary = CF_POPULATION_POLICY_PRIMARY.CF_POPULATION_POLICY_FULL, Modifier = CF_POPULATION_POLICY_MODIFIER.CF_POPULATION_POLICY_MODIFIER_NONE },
InSync = CF_INSYNC_POLICY.CF_INSYNC_POLICY_NONE,
HardLink = CF_HARDLINK_POLICY.CF_HARDLINK_POLICY_NONE,
PlaceholderManagement = CF_PLACEHOLDER_MANAGEMENT_POLICY.CF_PLACEHOLDER_MANAGEMENT_POLICY_DEFAULT,
};

HRESULT res = PInvoke.CfRegisterSyncRoot(
@"C:\Users\finne\PStore",
SyncReg,
SyncPol,
CF_REGISTER_FLAGS.CF_REGISTER_FLAG_NONE
);

if (res != HRESULT.S_OK) {
Console.WriteLine($"Failed with {(uint) res:X8}");
throw Marshal.GetExceptionForHR((int) res) ?? new Exception($"Unidentified Error - {(uint) res:X8}");
}
}
}
}
}
< /code>
Я получаю выход < /p>
Failed with 80070057
Unhandled exception. System.ArgumentException: Value does not fall within the expected range.
at PStore.Install.Main() in C:\Users\finne\OneDrive\Documents\0coding\PStore\PStore\Install.cs:line 45
< /code>
Я должен увидеть, как облачный провайдер отображается в меню «Левая навигация исследователя файлов», но это не так и не отображается в реестре. < /p>
Я попытался изменить различные параметры, добавить или удалить дополнительные параметры и использовать перегрузку указателя cfregistersyncrout 
, все безрезультатно.
У меня нет конфликтов с другими. Облачные провайдеры, поскольку OneDrive не имеет доступа к соответствующей папке, и OneDrive - единственный поставщик, видимый в реестре. Маршаллированное исключение, но я не знаю, каким это может быть аргумент. Я тщательно проверил документы API, но не вижу, где любые аргументы, которые я прошел, приведут к ошибке. Я очистил свою /bin < /code> папку, как она говорится, но это не сработало. находится в разных библиотеках. Я не думаю, что это так, так как это все еще ошибки с моим одним файлом MRE. Однако, если это возможно, то я мог бы использовать советы о том, как решить проблему, поскольку я не уверен, как вообще подходить к этому. Для справки, но MRE выше демонстрирует проблему.

in providerregistrar.cs, существует код, который успешно регистрирует поставщика с использованием реестра, как предложено в этом руководстве Microsoft, но это, похоже, не работает С остальной частью API. Если окажется, что маршрут реестра - это путь, мне придется открыть новый вопрос, чтобы выяснить, почему он не работает с API -заполнителями. < /P>
Я подозреваю, что есть что -то Неправильно с аргументами, которые я передаю этой функции, так как есть мало документации, и я прохожу интерфейс C# для этих библиотек. Однако даже после обширной двойной проверки и проб и ошибок я ничего не нашел.
Пожалуйста, дайте мне знать, что вызывает эту ошибку!

Подробнее здесь: https://stackoverflow.com/questions/794 ... ersyncroot
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»