Подтвердить что ты не робот

Как узнать, является ли собственный метод безопасным/небезопасным?

Я реализую эту функцию: GetSystemPowerStatusEx и GetSystemPowerStatusEx2

в соответствии с этой статьей на MSDN, я должен создать класс с именем в соответствии с функциями, которые я буду использовать, но мой вопрос: Как узнать, в каком классе я должен поместить GetSystemPowerStatusEx и GetSystemPowerStatusEx2?

Я потерян...

Спасибо за помощь.

[EDIT]. Мой вопрос: кто из этих трех имен классов является хорошим для меня (NativeMethods/SafeNativeMethods/UnsafeNativeMethods)?

Эти методы должны быть в одном из следующих классов:

NativeMethods - этот класс не подавлять стеки для неуправляемых код. (System.Security.SuppressUnmanagedCodeSecurityAttribute не должны применяться к этому классу.) Этот класс предназначен для методов, которые могут быть используется везде, потому что стека будет выполняться.

SafeNativeMethods - этот класс подавляет стеки для неуправляемых код. (System.Security.SuppressUnmanagedCodeSecurityAttribute применяется к этому классу.) Этот класс для безопасных для кому позвонить. Абоненты этих методы не обязаны выполнять полный обзор безопасности, чтобы убедиться, что использование безопасно, поскольку методы безвредны для любого вызывающего абонента.

UnsafeNativeMethods - Этот класс подавляет стеки для неуправляемых код. (System.Security.SuppressUnmanagedCodeSecurityAttribute применяется к этому классу.) Этот класс для потенциальных потенциальных опасно. Любой вызывающий из этих методов должен провести полный обзор безопасности для убедитесь, что использование безопасно потому что никакая стековая прогулка не будет выполняется.

4b9b3361

Ответ 1

Это довольно глупое предупреждение и в конечном итоге непродуктивно. Но держать его счастливым просто, просто добавьте статический класс в свой проект с именем NativeMethods и поместите в него [DllImport] объявления. Нет необходимости в отдельных классах. Объявите их внутренними.

Остерегайтесь того, что вы не можете вызывать эти функции на эмуляторе, для тестирования их потребуется запустить его на самом устройстве. Чтобы ваша программа была отлаживаемой в эмуляторе, обязательно заклейте код, который называет их #ifdef DEBUG.

Ответ 2

Просто объявите их как статические методы в статическом классе; это стандартный подход.

Изменить: как отмечал комментатор, они также могут быть помещены в нестатический класс. По сути, если ваши методы Win32 являются статическими extern с атрибутом DLLImport, они могут работать практически в любом классе.

Ответ 3

Поместите их внутри класса, который вы собираетесь использовать в качестве статических методов, затем оберните их обычными методами, чтобы вы не потрудились над остальной частью приложения с понятием, что есть что-то extern.

Я использую этот подход, и он никогда не терпит неудачу.

EDIT:

Проверьте это:

http://pinvoke.net/search.aspx?search=GetSystemPowerStatusEx