Arquivo da tag: framework .net

Incorporando funções nativas do Windows em seu projeto .NET

Hoje gostaria de mostrar como importar algumas funções nativas do Windows em seu aplicativo usando C#.NET e mostrar como utilizar using de maneira diferente.

Muitas pessoas precisam acessar funções nativas do sistema operacional Windows e para isso é necessário fazer algumas importações acima do método. Mas antes de começar a mostrar, é necessário usar algumas classes do Framework.NET.

using System;
using System.Globalization;
using System.Runtime.ConstrainedExecution;
using System.Runtime.InteropServices;
using System.Security.Principal;
using System.Text;

Junto desses “using” descritos acima, existe uma maneira nova de criar variável local que assume os dados da classe. Primeiro se coloca o nome igualando ao da classe que deseja usar:

using SysComTypes = System.Runtime.InteropServices.ComTypes;

Note que a classe de System.Runtime.InteropServices.ComTypes foi atribuída para a variável SysComTypes. Essa variável pode ser usada dentro da classe em qualquer lugar. É uma maneira interessante para uso de variáveis locais.

Passando agora para a parte de importação nativa do sistema operacional, você precisa colocar no mínimo três linhas de código para cada importação dependendo do método. Em exemplo, para verificar se o login do usuário precisa do código abaixo:

//
// advapi32.dll
//
[DllImport("advapi32", CharSet = CharSet.Unicode, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern bool LogonUser(string lpszUsername, string lpszDomain, string lpszPassword, LogOnType dwLogonType, LogOnProvider dwLogonProvider, out IntPtr phToken);
[DllImport("advapi32", CharSet = CharSet.Unicode, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern bool LogonUser(string lpszUsername, string lpszDomain, IntPtr lpszPassword, LogOnType dwLogonType, LogOnProvider dwLogonProvider, out IntPtr phToken);

A dll nativa é a advapi32 do Windows. Existem outras interfaces disponíveis dessa dll, porém não são muito utilizadas.

Para a dll kernel32 existem outros métodos específicos como pegar a informação do HD local, verificar o status da thread, encontrar arquivo, pegar a memória da máquina e muito mais. Veja alguns exemplos abaixo:

 
//
// kernel32.dll
//
[DllImport("kernel32", BestFitMapping = false, CharSet = CharSet.Unicode, SetLastError = true, ThrowOnUnmappableChar = true)]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern bool GetVolumeInformation(string lpRootPathName, StringBuilder lpVolumeNameBuffer, int nVolumeNameSize, out int lpVolumeSerialNumber, out int lpMaximumComponentLength, out int lpFileSystemFlags, StringBuilder lpFileSystemNameBuffer, int nFileSystemNameSize);
[DllImport("kernel32", SetLastError = true)]
internal static extern ExecutionState SetThreadExecutionState(ExecutionState esFlags);
[DllImport("kernel32", BestFitMapping = false, CharSet = CharSet.Auto, SetLastError = true, ThrowOnUnmappableChar = true)]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern bool FindNextFile(SafeFindFileHandle hndFindFile, [In, Out] FindData lpFindFileData);
[DllImport("kernel32", CharSet = CharSet.Auto, SetLastError = true)]
internal static extern void GlobalMemoryStatus(NativeMemoryStatus lpBuffer);
[DllImport("kernel32", CharSet = CharSet.Auto, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern bool GlobalMemoryStatusEx(NativeMemoryStatusEx lpBuffer);

Bom, o objetivo foi mostrar apenas como colocar a chamada de funções ou métodos nativos do sistema operacional. Em um próximo artigo posso mostrar como usar esses métodos específicos.

Além dessas dlls, existem outras como oleaut32, setupapi, shell32, shlwapi e ole32.dll. Todas essas existem métodos próprios para uso na linguagem C#.NET ou qualquer outra do framework .NET.

Espero que tenha gostado e qualquer dúvida pode entrar em contato pelo site.

Fonte: Maurício Júnor/IMasters

Token e Sessão Corrente com C#.NET

Hoje vou falar um pouco e mostrar via código como pegar o número do token ou sessão corrente do usuário que está navegando em seu sistema ou site. Lembro que esse código serve para qualquer tipo de aplicativo.

Usado: Visual Studio .NET 2010, Linguagem C#.NET, Plataforma ASP.NET.

O que vou falar é simples de fazer, porém, quase ninguém sabe que existe esse tipo de informação disponível no framework .NET.

Geralmente, esse tipo de informação é utilizada em sistema de comércio eletrônico que guarda as informações do usuário relacionando a um número qualquer, que pode ser um token ou sessão corrente.

O primeiro passo é importar uma classe dentro da classe principal do sistema.

using System.Security.Principal;

Para pegar o token corrente, coloque o código:

WindowsIdentity.GetCurrent().Token.ToString();

O código acima busca um número do token que pode ser gerado a cada acesso. Para manter o mesmo código é bom pegar o valor e gerar em uma sessão ou token.

Para pegar a sessão corrente, coloque o código:

Session.SessionID.ToString();

Para testar, você pode mandar escrever os valores na tela com o Response.Write.

protected void Page_Load(object sender, EventArgs e)
        {
            Response.Write(WindowsIdentity.GetCurrent().Token.ToString());
            Response.Write("<Br><br>"+Session.SessionID.ToString());
        }

No meu teste, foi impresso na tela os seguintes dados.

1316 - Token
ts3iammnrqpdrvxcjgjwrss2 - Sessao

Note que o token é um número com 4 dígitos e a sessão é composta de números e letras. Dependendo do que está precisando um ou outro pode ser de grande valia.

É isso. Espero que tenha gostado e qualquer dúvida pode entrar em contato pelo site.

Fonte: Mauricio Junior/IMaster