Image Image Image Image Image
Scroll to Top

Topo

framework .net

20

nov
2011

Sem Comentários

Em Blog

Por Allison

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

Em 20, nov 2011 | Sem Comentários | Em Blog | Por Allison

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

Tags | , , ,

06

nov
2011

Sem Comentários

Em Blog

Por Allison

Token e Sessão Corrente com C#.NET

Em 06, nov 2011 | Sem Comentários | Em Blog | Por Allison

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

Tags | , , ,