Rodrigo Strauss :: Blog
PREFAST rocks!
Para quem não sabe, o Prefast é um analisador estático de código fonte, que vem junto com o DDK do Windows Server 2003. Ele foi feito para pegar erros de lógica, que o compilador não pega. Olhe esse código:
NTSTATUS s; IO_STACK_LOCATION* pIrpSp; pIrpSp = IoGetCurrentIrpStackLocation(Irp); ... switch(pIrpSp->MinorFunction) { case FUNC1: s = OnConnect(DeviceObject,Irp,NextDevice); break; case FUNC2: OnDisconnect(DeviceObject,Irp,NextDevice); break; default: IoSkipCurrentIrpStackLocation(Irp); s = IoCallDriver(NextDevice,Irp); } return s;
Achou o erro? O PREFAST achou. Olhe o log dele:
dispatch.cpp(197) : warning 1: Using uninitialized memory 's'. problem occurs in function 'OnDeviceInternalIoControl' Path includes 6 statements on the following lines: 177 178 180 182 189 197
A linha 197 é a que chama "OnDisconnect". Repare bem que o retorno dessa função não é atribuído à variável s. Caso o valor de "pIrpSp->MinorFunction" seja "FUNC2", a variável s nunca seria inicializada, e minha função retornaria o lixo que estivesse na pilha.
Em 13/08/2004 04:22, por Rodrigo Strauss




