SemaphoreAcl.Create(Int32, Int32, String, Boolean, SemaphoreSecurity) Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Obtém ou cria uma instância de Semaphore, permitindo que uma instância de SemaphoreSecurity seja especificada opcionalmente para defini-la durante a criação do semáforo.
public:
static System::Threading::Semaphore ^ Create(int initialCount, int maximumCount, System::String ^ name, [Runtime::InteropServices::Out] bool % createdNew, System::Security::AccessControl::SemaphoreSecurity ^ semaphoreSecurity);
public static System.Threading.Semaphore Create (int initialCount, int maximumCount, string? name, out bool createdNew, System.Security.AccessControl.SemaphoreSecurity? semaphoreSecurity);
static member Create : int * int * string * bool * System.Security.AccessControl.SemaphoreSecurity -> System.Threading.Semaphore
Public Shared Function Create (initialCount As Integer, maximumCount As Integer, name As String, ByRef createdNew As Boolean, semaphoreSecurity As SemaphoreSecurity) As Semaphore
Parâmetros
- initialCount
- Int32
O número inicial de solicitações para o semáforo que podem ser atendidas simultaneamente.
- maximumCount
- Int32
O número máximo de solicitações para o semáforo que podem ser atendidas simultaneamente.
- name
- String
O nome, se o objeto de sincronização deve ser compartilhado com outros processos; caso contrário, null
ou uma cadeia de caracteres vazia. O nome diferencia maiúsculas de minúsculas. O caractere de barra invertida (\) é reservado e só pode ser usado para especificar um namespace. Para obter mais informações sobre namespaces, consulte a seção comentários. Pode haver mais restrições sobre o nome, dependendo do sistema operacional. Por exemplo, em sistemas operacionais baseados em Unix, o nome após a exclusão do namespace deve ser um nome de arquivo válido.
- createdNew
- Boolean
Quando esse método retornar, esse argumento será sempre definido como true
se um semáforo local for criado; ou seja, quando name
for null
ou Empty. Se name
tiver um valor não vazio válido, esse argumento será definido como true
quando o semáforo do sistema for criado ou será definido como false
se um semáforo do sistema existente com esse nome for encontrado. Este parâmetro é passado não inicializado.
- semaphoreSecurity
- SemaphoreSecurity
A segurança de controle de acesso do semáforo opcional a ser aplicada.
Retornos
Um objeto que representará um semáforo do sistema, se for nomeado, ou um semáforo local, se não tiver nome.
Exceções
initialCount
é um número negativo.
- ou -
maximumCount
não é um número positivo.
initialCount
é maior que maximumCount
.
- ou -
Somente .NET Framework: name
é maior que MAX_PATH (260 caracteres).
name
é inválido. Isso pode ser por vários motivos, incluindo algumas restrições impostas pelo sistema operacional, como um prefixo desconhecido ou caracteres inválidos. Observe que o nome e os prefixos comuns "Global\" e "Local\" diferenciam maiúsculas de minúsculas.
- ou -
Ocorreu outro erro. A propriedade HResult
pode fornecer mais informações.
Somente Windows: name
especificou um namespace desconhecido. Confira mais informações em Nomes do objeto.
O name
é muito longo. As restrições de comprimento podem depender do sistema operacional ou da configuração.
Não é possível criar um objeto de sincronização com o name
fornecido. Um objeto de sincronização de um tipo diferente pode ter o mesmo nome.
Comentários
O name
pode ser prefixado com Global\
ou Local\
para especificar um namespace. Quando o Global
namespace é especificado, o objeto de sincronização pode ser compartilhado com todos os processos no sistema. Quando o Local
namespace é especificado, que também é o padrão quando nenhum namespace é especificado, o objeto de sincronização pode ser compartilhado com processos na mesma sessão. No Windows, uma sessão é uma sessão de logon e os serviços normalmente são executados em uma sessão não interativa diferente. Em sistemas operacionais semelhantes ao Unix, cada shell tem sua própria sessão. Objetos de sincronização local de sessão podem ser apropriados para sincronização entre processos com uma relação pai/filho em que todos eles são executados na mesma sessão. Para obter mais informações sobre nomes de objetos de sincronização no Windows, consulte Nomes de objeto.
Se um name
for fornecido e um objeto de sincronização do tipo solicitado já existir no namespace , o objeto de sincronização existente será aberto. Se um objeto de sincronização de um tipo diferente já existir no namespace , um WaitHandleCannotBeOpenedException
será gerado. Caso contrário, um novo objeto de sincronização será criado.
Cuidado
Por padrão, um semáforo nomeado não é restrito ao usuário que o criou. Outros usuários podem ser capazes de abrir e usar o semáforo, incluindo interferir no semáforo adquirindo o semáforo várias vezes e não liberando-o. Para restringir o acesso a usuários específicos, você pode passar um SemaphoreSecurity ao criar o semáforo nomeado. Evite usar semáforos nomeados sem restrições de acesso em sistemas que podem ter usuários não confiáveis executando código.