/ SAFESEH (obraz ma bezpieczne procedury obsługi wyjątków)

/SAFESEH[:NO]

Gdy /SAFESEH jest określony, program łączący będzie tylko utworzenia obrazu, jeśli można utworzyć również spis procedur obsługi wyjątków bezpieczne obrazu.Ta tabela określa, dla których procedur obsługi wyjątków są prawidłowe dla obrazu systemu operacyjnego.

/SAFESEHjest ważne tylko podczas łączenia dla architektury x 86 obiektów docelowych./SAFESEHnie jest obsługiwana dla platform, które mają już procedur obsługi wyjątków zauważyć.Na przykład na x64 i Itanium, wszystkich procedur obsługi wyjątków są zapisane w PDATA.ML64.exe ma obsługę dodanie adnotacji, które emituje informacje strukturalnej obsługi wyjątków (XDATA i PDATA), obraz, pozwalając na odpoczynek, za pomocą funkcji ml64.Zobacz MORGÓW x 64 (ml64.exe) Aby uzyskać więcej informacji.

Jeśli /SAFESEH nie jest określony, program łączący da obraz z tabeli wyjątków bezpiecznej obsługi wszystkich modułów są zgodne z funkcją Obsługa bezpiecznych wyjątków.Wszystkie moduły nie były zgodne z wyjątkiem bezpiecznej obsługi funkcji, obraz wynikowy nie będzie zawierać spis procedur obsługi wyjątków bezpieczne.Jeśli /SUBSYSTEM określa systemu WINDOWSCE lub jedną z opcji EFI_ *, program łączący nie będzie próbował dają obraz z tabeli wyjątków bezpiecznej obsługi, ponieważ żadna z tych podsystemów można użyć informacji.

Jeśli /SAFESEH:NO jest określony, program łączący nie przyniesie obraz z tabeli wyjątków bezpiecznej obsługi, nawet jeśli wszystkie moduły są zgodne z wyjątkiem bezpiecznej obsługi funkcji.

Najczęstszym powodem dla łączącemu nie być w stanie produkować obrazu jest ponieważ jeden lub więcej plików wejściowych (moduły) do programu łączącego nie był zgodny z funkcją obsługi bezpiecznych wyjątków.Częstą przyczyną dla modułu nie są zgodne z procedur obsługi wyjątków bezpieczne jest ponieważ został on utworzony za pomocą kompilatora z poprzednich wersji programu Visual C++.

Można również zarejestrować funkcję jako obsługi structured exception, za pomocą .SAFESEH.

Nie jest możliwe oznaczyć istniejącego binarne jako posiadające wyjątek bezpiecznej obsługi (lub nie procedur obsługi wyjątków); muszą zostać dodane informacji na temat Obsługa bezpiecznych wyjątków w czasie kompilacji.

Możliwość tworzenia spisu procedur obsługi wyjątków bezpieczne łączącego zależy od aplikacji przy użyciu biblioteki c runtime.Jeśli łączysz się z /NODEFAULTLIB i chcesz tabelę procedur obsługi wyjątków bezpieczne, trzeba podać struct config obciążenia, (np. można znaleźć w pliku źródłowym loadcfg.c CRT) zawierający wszystkie wpisy określone dla języka Visual C++.Na przykład:

#include <windows.h>
extern DWORD_PTR __security_cookie;  /* /GS security cookie */

/*
 * The following two names are automatically created by the linker for any
 * image that has the safe exception table present.
*/
 
extern PVOID __safe_se_handler_table[]; /* base of safe handler entry table */
extern BYTE  __safe_se_handler_count;  /* absolute symbol whose address is
                                           the count of table entries */
typedef struct {
    DWORD       Size;
    DWORD       TimeDateStamp;
    WORD        MajorVersion;
    WORD        MinorVersion;
    DWORD       GlobalFlagsClear;
    DWORD       GlobalFlagsSet;
    DWORD       CriticalSectionDefaultTimeout;
    DWORD       DeCommitFreeBlockThreshold;
    DWORD       DeCommitTotalFreeThreshold;
    DWORD       LockPrefixTable;            // VA
    DWORD       MaximumAllocationSize;
    DWORD       VirtualMemoryThreshold;
    DWORD       ProcessHeapFlags;
    DWORD       ProcessAffinityMask;
    WORD        CSDVersion;
    WORD        Reserved1;
    DWORD       EditList;                   // VA
    DWORD_PTR   *SecurityCookie;
    PVOID       *SEHandlerTable;
    DWORD       SEHandlerCount;
} IMAGE_LOAD_CONFIG_DIRECTORY32_2;

const IMAGE_LOAD_CONFIG_DIRECTORY32_2 _load_config_used = {
    sizeof(IMAGE_LOAD_CONFIG_DIRECTORY32_2),
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    &__security_cookie,
    __safe_se_handler_table,
    (DWORD)(DWORD_PTR) &__safe_se_handler_count
};

Aby ustawić tę opcję programu łączącego w środowisku projektowym programu Visual Studio

  1. Otwórz projekt Stron właściwości okno dialogowe.Aby uzyskać szczegółowe informacje, zobacz Ustawianie właściwości projektu Visual C++.

  2. Kliknij przycisk program łączący folder.

  3. Kliknij przycisk wiersza polecenia stronę właściwości.

  4. Wpisz opcję do Dodatkowe opcje pole.

Aby ustawić tę opcję linker programowo

Zobacz też

Informacje

Ustawianie opcji Linker

Opcje Linker